Finding a particular solution when there are infinitely many

1 次查看(过去 30 天)
I need to find a particular solution for a specific range.
The solution I got using the solve method led me to a 0.
>> a1 = 5;
>> a2 = 10;
>> b = 13;
>> c = 1*10^-3;
>> d = 0.57 * 10^-3;
>> e = 0.57 * 10^-3;
>> d1 = d/c;
>> e1 = e/c;
>> f = 0.02 * 10^-3;
>> g = d/c+e/c-1;
>> h = acos(1 - f/(2*g*c));
>> n = 6*(10^6)*g^2+3*(10^6)*g*6894.75729;
>> syms m;
k = @(a,m) a ./ (b .* ((c)^2)*n) - sin(m) .* ((cos (h) ./ cos (m))-1).^1.5;
solve(m);
>> solve(m)
ans =
0
However, the range of values where my solution lies is 0.35< m < 0.41 as shown in the photo. which isn't 0. http://i.imgur.com/RrMO1Ro.jpg
  2 个评论
Ikhsan
Ikhsan 2013-3-1
I tried using this. http://people.clarkson.edu/~wwilcox/ES100/eqsolve.htm "Here are the steps to find a solution numerically:
Convert the equation to a function consisting of everything moved to the left-hand side, e.g. func2(x) = sin(x)-1/2. Create this function in the MATLAB editor, save to the Current Directory, and make certain the current directory is in the path (File / Set Path). For example:
function out = func2(x) out = sin(x) - 1/2; end
Plot this function over the range of interest to see where the solutions are, e.g.:
>> clear, x = - 4:0.01:4; plot(x,func2(x))
Use one of the following formats to find the solution:
>> fzero('func2',3) or >> fzero(@func2,3) or >> fzero('func2', [2,3])
MATLAB finds the value of x nearest 3 that gives func2 = 0. Notice (“whos” or Workspace) that the result is double, so no conversions are necessary for subsequent numeric calculations."
However I received this error.
ans =
@(a,m)a./(b.*((c)^2)*l)-sin(m).*((cos(h)./cos(m))-1).^1.5
>> m = - 4:0.01:4; plot(m,func2(m))
??? Error using ==> plot
Conversion to double from function_handle is not possible.
Juan Camilo Medina
编辑:Juan Camilo Medina 2013-3-5
Matlab cannot plot func2 because you haven't define a, in other word, you are trying to do a 2D plot of a multivarible equation without the necessary input arguments.
You need to define what a is, let's say you picked a to be 5 then try:
m = - 4:0.01:4; plot(m,func2(5,m))

请先登录,再进行评论。

回答(2 个)

Walter Roberson
Walter Roberson 2013-3-1
Do not apply solve() to a function handle. Apply fsolve() to function handles, or apply solve() to symbolic expressions.
  5 个评论
Ikhsan
Ikhsan 2013-3-6
MATLAB R2011b(7.13.0.564), using my school's computer.
My goal is to retrieve the value of 'm' for a given value of 'a', in a specified range of 'm'.
I thought that this would be the way to do it.

请先登录,再进行评论。


Juan Camilo Medina
your syntax is wrong, instead of using
solve(m)
try
syms m a;
k = @(a,m)a./(b.*((c)^2)*n)-sin(m).*((cos(h)./cos(m))-1).^1.5;
solve(k(a,m)==0,m)
But it also appears that your equation is ill-posed. If you look at the picture you posted, they are plotting E vs. a, and not m. It's rather strange that an equation with a bunch of sines and cosines gives you a straight line.
  3 个评论
Juan Camilo Medina
I think your problem is not how you solve it, but your equation instead. It seems to be ill-posed. Check your problem statement.
Ikhsan
Ikhsan 2013-3-6
编辑:Ikhsan 2013-3-6
You might be right. As stated above, I'm intending to find the value of 'm' for a given value of 'a', in a specified range of 'm'.
The equation involves the solution to quintics. However the solutions(range) i'm interested in only lies in the range of the graph as shown in the picture.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Calculus 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by