如何在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
,我想这意味着这个方程至少应该有一些实数解。你的结论与你的实验不符。你已经证明了函数有实数输出,而不是解那个函数等于某个整数的值是实的。。。