S= s1[i]*fr[i-1]/fr[i]+(r[i]-rs3[i])/fr[i] ZeroDivisionError: float division by zero
时间: 2024-01-05 13:03:25 浏览: 24
This error occurs because there is a division by zero in the expression.
To fix this error, you can add a condition to check if the denominator (fr[i]) is zero before performing the division. For example:
if fr[i] != 0:
S = s1[i]*fr[i-1]/fr[i] * (r[i]-rs3[i])/fr[i]
else:
S = 0 # or any other appropriate value or error handling mechanism
相关问题
if (jjz == jji) v = vt(jjz); Iap = apor(jjz); Ilamd = lamdpor(jjz); elseif (jjz == 1 && jji == 2) S1 = Sz * (de - H_layer(1)) / dee; S2 = Sz * H_layer(1) / dee; S3 = Sz - S2 - S1; s3 = 1 / (S1 + S2 + S3); v = vt(jjz); Ilamd = exp((d1*S1 + d0 * S2 + d0 * S3)*s3); Ip = (S1 * p(2) + S2 * p(1) + S3 * p(1))*s3; Ic = (S1 * c(2) + S2 * c(1) + S3 * c(1))*s3; Iap = Ilamd / Ip / Ic; elseif (jjz == 1 && jji == 3) S1 = Sz * (de - H_layer(2)) / dee; S2 = Sz * (H_layer(2) - H_layer(1)) / dee; S3 = Sz * H_layer(1) / dee; S4 = Sz - S1 - S2 - S3; s4 = 1 / (S1 + S2 + S3 + S4); v = vt(jjz); Ilamd = exp((d2*S1 + d1 * S2 + d0 * S3 + d0 * S4)*s4); Ip = (S1 * p(3) + S2 * p(2) + p(1) * S3 + p(1) * S4)*s4; Ic = (S1 * c(3) + S2 * c(2) + c(1) * S3 + c(1) * S4)*s4; Iap = Ilamd / Ip / Ic; end 优化
同样可以使用 `switch` 语句来代替多个 `elseif` 语句,从而使代码更加简洁易懂。具体实现如下:
```
switch true
case (jjz == jji)
v = vt(jjz);
Iap = apor(jjz);
Ilamd = lamdpor(jjz);
case (jjz == 1 && jji == 2)
S1 = Sz * (de - H_layer(1)) / dee;
S2 = Sz * H_layer(1) / dee;
S3 = Sz - S2 - S1;
s3 = 1 / (S1 + S2 + S3);
v = vt(jjz);
Ilamd = exp((d1*S1 + d0 * S2 + d0 * S3)*s3);
Ip = (S1 * p(2) + S2 * p(1) + S3 * p(1))*s3;
Ic = (S1 * c(2) + S2 * c(1) + S3 * c(1))*s3;
Iap = Ilamd / Ip / Ic;
case (jjz == 1 && jji == 3)
S1 = Sz * (de - H_layer(2)) / dee;
S2 = Sz * (H_layer(2) - H_layer(1)) / dee;
S3 = Sz * H_layer(1) / dee;
S4 = Sz - S1 - S2 - S3;
s4 = 1 / (S1 + S2 + S3 + S4);
v = vt(jjz);
Ilamd = exp((d2*S1 + d1 * S2 + d0 * S3 + d0 * S4)*s4);
Ip = (S1 * p(3) + S2 * p(2) + p(1) * S3 + p(1) * S4)*s4;
Ic = (S1 * c(3) + S2 * c(2) + c(1) * S3 + c(1) * S4)*s4;
Iap = Ilamd / Ip / Ic;
end
```
这样代码就更加清晰易懂,并且可以方便地扩展到其他情况。
t=*s1; *s1++=*s2; *s2--=t C语言怎么解释
这是一个C语言中的交换两个字符串的函数,其功能是将字符串s1和字符串s2进行交换。具体解释如下:
- 首先,将s1指向的字符保存到一个临时变量t中。
- 然后,将s1指向的字符替换成s2指向的字符,并将指针s1向后移动一位,指向下一个字符。
- 接着,将s2指向的字符替换成之前保存在t中的字符,并将指针s2向前移动一位,指向前一个字符。
- 最后,完成交换。
需要注意的是,该函数只适用于两个字符串的长度相等的情况,否则可能会导致越界访问或者内存泄漏等问题。