matlab中调用solve函数出错?怎么解决clc;clear all,close all;l=[20 50 100 200 500 1000 2000 5000 10000 20000 50000 100000 inf];for i=1:length(l)j=1for Re=linspace(4*10^3,10^7,100)t=solve('lambda-(-2*log10(2.51/Re/sqrt(lambda)+0.27/l(i)))^(-2)

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/15 19:24:50
matlab中调用solve函数出错?怎么解决clc;clear all,close all;l=[20 50 100 200 500 1000 2000 5000 10000 20000 50000 100000 inf];for i=1:length(l)j=1for Re=linspace(4*10^3,10^7,100)t=solve('lambda-(-2*log10(2.51/Re/sqrt(lambda)+0.27/l(i)))^(-2)
xW[S+*IFZݐ07?59I+HJ HsmbK`l ǜՓ^a1;=7ݽW%Mz㕹;i̿Ȧԟ2uDvT?5͕f I*TVa5WDGm^ O 8G%md#TƖ{JrTsΛaEHfRLqx!:0G밫xTr|BMzD#;SFsݪ#t:Ϋь;C"⟳|@ /!CM f;ĉ3sZrhB`LIUpGDL0Re[*yjEu#$񨒱;|gY;%M k?G^Yp l܆ݺQM94 u]`xQ$ޘ1j)AJv{Y7wE}ll yqtjgᑿd4 K䆄 R>|Hjx7^G" @wF{T|hS@ p@S"Hrp|{V-N&ݛРzgPODћόJfIy?Uv="97{MF D 9vtW0q]Y~0]&casgN8pY׊[/u_`F\vnJ_Q6)X e[.

matlab中调用solve函数出错?怎么解决clc;clear all,close all;l=[20 50 100 200 500 1000 2000 5000 10000 20000 50000 100000 inf];for i=1:length(l)j=1for Re=linspace(4*10^3,10^7,100)t=solve('lambda-(-2*log10(2.51/Re/sqrt(lambda)+0.27/l(i)))^(-2)
matlab中调用solve函数出错?怎么解决
clc;
clear all,close all;
l=[20 50 100 200 500 1000 2000 5000 10000 20000 50000 100000 inf];
for i=1:length(l)
j=1
for Re=linspace(4*10^3,10^7,100)
t=solve('lambda-(-2*log10(2.51/Re/sqrt(lambda)+0.27/l(i)))^(-2) = 0','lambda')
lambda(j)=vpa(t,5)
j=j+1
end
semilogx(Re,log10(lambda)),hold on
end
xlabel('Reynolds number'),ylabel('log10(\lambda)');
tt=['d/k';'20';'50';'100';'200';'500';'1000';'2000';'5000';'10000';'20000';'50000';'100000';'\inf'];
gtext(tt);

matlab中调用solve函数出错?怎么解决clc;clear all,close all;l=[20 50 100 200 500 1000 2000 5000 10000 20000 50000 100000 inf];for i=1:length(l)j=1for Re=linspace(4*10^3,10^7,100)t=solve('lambda-(-2*log10(2.51/Re/sqrt(lambda)+0.27/l(i)))^(-2)

程序不算长,但问题可不少:

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
l=[20 50 100 200 500 1000 2000 5000 10000 20000 50000 100000 inf];
for i=1:length(l)
    j=1;
    syms lambda
    RE=linspace(4*10^3,10^7,100);
    for Re=RE
        t=solve(lambda-(-2*log(2.51/Re/sqrt(lambda)+0.27/l(i))/log(10))^(-2));
        Lambda(j)=double(t);
        j=j+1;
    end
    c = rand(1,3);
    L{i} = sprintf('d/k = %g', l(i));
    semilogx(RE,log10(Lambda),'color',c)
    hold on, drawnow
end
xlabel('Reynolds number'),ylabel('log10(\lambda)');
legend(L{:},0)

matlab中调用solve函数出错?怎么解决clc;clear all,close all;l=[20 50 100 200 500 1000 2000 5000 10000 20000 50000 100000 inf];for i=1:length(l)j=1for Re=linspace(4*10^3,10^7,100)t=solve('lambda-(-2*log10(2.51/Re/sqrt(lambda)+0.27/l(i)))^(-2) 用matlab调用freqz函数出错,点帮助有两个freqz函数,一... 用matlab解常微分方程组,为什么会出错?调用的是dsolve的函数. 关于matlab函数的参数加不加引号的问题matlab中,有的函数调用时参数需要加上单引号,比如solve()函数,而有的函数却不加单引号比如expand(),到底什么时候加呢, MATLAB,solve函数, matlab 中如何调用M文件中函数? matlab 怎么调用拉格朗日函数 matlab中solve函数不能用的原因 matlab中t调用maple求不等式这样可以吗?maple('solve({x+4>1,x-2 matlab中~.m文件中的函数:function [Yhard,Ysoft] = treeTest(model,X,opts);在另外一个文件中调用.m文件中的这个函数:,ysoft]=treeTest(model1,X,opts);,一直出错:Expression or statement is incorrect--possibly unbalanced (, matlab中,定义了y='x+1',如果调用solve(‘eq1’,即要求solve('x+1=0','x'). matlab中 simple函数为什么将y化简会出错 matlab 中的 solve怎么用 为什么我老是出错 matlab解方程中solve('cos(t)=(0.05913+57.*sin(t))/(0.0976*57+t*57)','t')出错了 matlab中solve函数solve函数最多可以解多少维的方程组,上千维的可以吗, matlab中solve函数求解隐函数的问题qi=solve('qi-bet*detm/(bet/(B*0.018526^0.2*qi^0.6/di^0.6)+0.7*10^(-3)*2*ft/(ft+fi)/203+r0+1/aj)=0','qi')其中除了qi外,其他参数的值都在前边的程序中算出来了,不知道是哪里出错了, 为什么solve函数后matlab无反应 请问在matlab中怎样调用 高斯核函数 进行时间序列的预测分析啊?