发布网友 发布时间:2022-04-23 15:28
共1个回答
热心网友 时间:2023-09-15 12:44
程序不算长,但问题可不少:
1、solve函数的这种调用方式:
solve('lambda-(-2*log10(2.51/Re/sqrt(lambda)+0.27/l(i)))^(-2) = 0','lambda')是把整个字符串作为参数传递给符号计算内核的,给参数l和Re赋值不起作用,所以在符号计算内核求解时会把l、Re也看成变量,从而导致求解失败。解决的办法是,定义符号变量lambda,然后把方程写成符号表达式从而代入l(i)、Re的值,再调用solve求解。
2、下面的写法
for Re=linspace(4*10^3,10^7,100)Re作为循环控制变量,每次只取一个值,后面用semilogx绘图时,Re只是一个标量。
3、使用vpa保留一定精度,得到的结果仍然是sym类型,不是数值类型,无法直接用于绘图。绘图时仍需要使用double将其转换成数值类型,这样vpa就显得没有太大必要了,直接调double就可以了。
4、方程中使用的函数log10是通过调用log2实现的,而log2对于sym对象并没有定义,所以,应该把log10(...)换成log(...)/log(10)。
5、最后面的gtext不知道楼主想要实现什么效果,目前可以知道的是,tt的定义不正确,因为是把不同长度的字符串拼接成矩阵。如果是想显示图例,那么目前的代码也不可行,因为所有的线条风格都相同。我给改了一下,每个线条用一种随机颜色,然后显示legend。
6、其它还有一些小的细节,比如行尾是否用分号、循环过程中每次绘图之后是否刷新(不刷新则循环过程中无响应,容易被当成死机),请自行体会吧。
附修改后的代码和绘图结果:
clear Lambda L