Solution of implicit function
显示 更早的评论
Hi,
I have an equation for example x^2+y^2-16=0 . How can I get all of x and y value for this equation. Of course I can write it y=sqrt(16-x^2). But what if this equation is more complex. I tried something with solve command on matlab but i didn't achive. can u help me?
2 个评论
Matt J
2016-1-25
How can I get all of x and y value for this equation.
There are infinite pairs x,y that solve your example equation. I think you really mean, "how can I get y for a given x?"
Cengiz Görkem DENGIZ
2016-1-25
回答(1 个)
If analytical solutions exist, then SOLVE would be the thing to use.
If analytical solutions don't exist, then you would have to search numerically for a solution using FZERO or FSOLVE.
6 个评论
Cengiz Görkem DENGIZ
2016-1-25
Matt J
2016-1-26
Once you have solved the equation symbolically, you could convert it to a vectorized anonymous function,
>> x=sym('x'); f=sqrt(16-x^2)
f =
(16 - x^2)^(1/2)
>> fa=str2func(['@(x)' char(vectorize(f))])
fa =
@(x)(16-x.^2).^(1./2)
>> tic;fa(linspace(0,1,401));toc
Elapsed time is 0.000538 seconds.
Seems pretty fast to me.
Cengiz Görkem DENGIZ
2016-1-26
Walter Roberson
2016-1-26
So you solve() for s1 and get two results (two branches of a quadratic.) And you matlabFunction() that; do the parts individually if you need to. Then substitute in the s2 values.
Cengiz Görkem DENGIZ
2016-1-26
Walter Roberson
2016-1-26
c = rand; s90 = rand; p = rand; q = rand; sb = rand; su = rand; %in other words you need numeric values for them
syms s1 s2
eqn = s1^2/s0^2-c*s1*s2/s0/s90+s2^2/s90^2+((p+q)-(p*s1+q*s2)/sb)*s1*s2/s0/s90-su^2;
sols = solve(eqn, s1);
f1 = matlabFunction(sols(1), s2);
f2 = matlabFunction(sols(2), s2);
S2 = linspace(-50,50);
plot(S2, f1(S2), S2, f2(S2));
类别
在 帮助中心 和 File Exchange 中查找有关 Calculus 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!