如何在MATLAB中使用循环求解一系列方程?
我试图解以下一系列方程,并存储每个方程的正解 以下是我使用的代码:如何在MATLAB中使用循环求解一系列方程?,matlab,Matlab,我试图解以下一系列方程,并存储每个方程的正解 以下是我使用的代码: s=zeros(1,100); for i=1:100 syms l0 positive eqn(i)= .0017777*(l0^.25)/(.05-l0) == i; s(i)=solve(eqn(i),l0); end 但最后我得到了以下错误: 从sym转换为double时发生以下错误:无法 将表达式转换为双数组 谁能帮我解决这个问题 由于等式中的1/4幂,因此存在复杂的解 您只需要真正的解决方案,因
s=zeros(1,100);
for i=1:100
syms l0 positive
eqn(i)= .0017777*(l0^.25)/(.05-l0) == i;
s(i)=solve(eqn(i),l0);
end
但最后我得到了以下错误:
从sym转换为double时发生以下错误:无法
将表达式转换为双数组
谁能帮我解决这个问题 由于等式中的
1/4
幂,因此存在复杂的解
您只需要真正的解决方案,因此请指定
solve(eqn(i),l0,'Real',true);
这会给你想要的结果
请注意,MATLAB会自动将
solve
的符号输出转换为double,因为您将s
初始化为double数组,而不是符号数组。这里的精度会降低,但可以像使用任何其他双数组一样使用答案。由于等式中的1/4
幂,因此存在复杂的解
您只需要真正的解决方案,因此请指定
solve(eqn(i),l0,'Real',true);
这会给你想要的结果
请注意,MATLAB会自动将
solve
的符号输出转换为double,因为您将s
初始化为double数组,而不是符号数组。您在这里失去了精度,但可以像使用任何其他双数组一样使用答案。您试图将solve
的符号结果存储到数值向量s
。如果solve
的结果无法直接转换为i
的某个值,则您将得到该错误。@horchler是否有解决此问题的方法?或者用其他方法来解这一系列方程并存储解?你可能不需要使用符号数学。尝试fzero
。但是你得到的错误可能意味着这个方程对于某些i
没有解。打印并调试。您正在尝试将solve
的符号结果存储到数值向量s
。如果solve
的结果无法直接转换为i
的某个值,则您将得到该错误。@horchler是否有解决此问题的方法?或者用其他方法来解这一系列方程并存储解?你可能不需要使用符号数学。尝试fzero
。但是你得到的错误可能意味着这个方程对于某些i
没有解。打印并调试。谢谢@Wolfie。它适用于这个方程,但当我将幂改为1/25,然后尝试s(I)=solve((.05*(2*l0)^(1/25))/(15*(21^(1/25))*(.05-l0))==I,l0,'real',true)
,它给出了相同的错误。起初我认为这可能是因为我的方程根本没有真正的解。但是我试着用不同的I
使用在线计算器来解决其中的几个问题,我得到了真正的解决方案。你知道这里可能有什么问题吗?“使用在线计算器”似乎有点离谱,你做过任何分析计算来验证结果吗?用一个你知道预期解决方案的方程来重现这个问题当我写P=.05*(2*l0)^(1/25))/(15*(21^(1/25))*(.05-l0)
用一些实值代替l0
,它会返回一些实数P
,我想这意味着这个方程至少应该有一些实数解。你的结论与你的实验不符。你已经证明了函数有实数输出,而不是解这个函数等于某个整数的函数是真的……谢谢@Wolfie。它对这个方程有效,但当我把幂改为1/25,然后尝试求解(.05*(2*l0)^(1/25))/(15*(21^(1/25))*(.05-l0))==i,l0,'real',true),它给了我同样的错误。起初我认为这可能是因为我的方程根本没有真正的解。但我尝试用不同的解了其中的几个。我使用在线计算器,得到了真正的解。你知道这里可能有什么问题吗?“使用在线计算器”似乎有些离谱,你做过任何分析计算来验证结果吗?用一个你知道预期解的方程来重现这个问题当我写P=.05*(2*l0)^(1/25))/(15*(21^(1/25))*(.05-l0)
用一些实值代替l0
,它会返回一些实数P
,我想这意味着这个方程至少应该有一些实数解。你的结论与你的实验不符。你已经证明了函数有实数输出,而不是解那个函数等于某个整数的值是实的。。。