Solving nonlinear equation inside for loop

I want to solve for p in the following equation: a1*P^0.5+a2*p+a3*p^1.5=k
if I need to iterate K from 1 to 10000 this is the code:
a1=1.4*10^25;
a2=2.7*10^24;
a3=1.311*10^23;
k=linspace(1,10000,10000);
syms p
for i=1:10000
p(i)=solve((a1*p(i)^0.5)+(a2*p(i))+(a3*p(i)^1.5)==k(i))
end
however I get the following error: Index exceeds the number of array elements (1).
Thank you.

3 件のコメント

Kim Ibrahim
Kim Ibrahim 2021 年 11 月 23 日
when I solve it outside the for loop for one value of K it gives me 1 solution; however i'm expecting three soutions
Dyuman Joshi
Dyuman Joshi 2021 年 11 月 24 日
You are expecting 3 solutions for each p and k, right?
Kim Ibrahim
Kim Ibrahim 2021 年 11 月 30 日
yes, this equation gives 3 solutions for p when I give k a value at each itertion. the question is i can`t make the dimentions right beause for the 10000 iteration eah give out 3 solutions. That`s the error I get
"Unable to perform assignment because the left and right sides have a different number of elements."

サインインしてコメントする。

 採用された回答

Matt J
Matt J 2021 年 11 月 30 日
編集済み: Matt J 2021 年 12 月 1 日

0 投票

Your equations are really polynomials in p^0.5. Therefore, you can do,
a1=1.4*10^25;
a2=2.7*10^24;
a3=1.311*10^23;
k=linspace(1,10000,10000);
p=cell(1,numel(k));
for i=1:10000
coeffs=[a3,a2,a1,-k(i)]; %polynomial coefficients
p{i}=sqrt(roots(coeffs));
end

1 件のコメント

Kim Ibrahim
Kim Ibrahim 2021 年 12 月 2 日
Thank you so much, the cell array helped.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

質問済み:

2021 年 11 月 23 日

コメント済み:

2021 年 12 月 2 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by