MATLAB解方程问题

symsnlanmuda=1.55;n1=1.6375696780514445567155543374853;n2=1.6443618413936927969908352... syms n
lanmuda=1.55;
n1=1.6375696780514445567155543374853;
n2=1.6443618413936927969908352393948;
n3=1.6375696780514445567155543374853;
c1=n2^2/n1^2;
c2=n2^2/n3^2;
k0=2*pi/lanmuda;
r1=sqrt(n.^2-n1^2)*k0;
r2=sqrt(n2^2-n.^2)*k0;
r3=sqrt(n.^2-n3^2)*k0;
fun=r2.*5-atan(c1.*r1./r2)-atan(c2.*r3./r2)-pi;
solve(fun,n)

为什么解不出来解,但画图显示应该有解。
展开
百度网友95030c1fd
推荐于2016-11-03
知道答主
回答量:14
采纳率:0%
帮助的人:9.4万
展开全部

发现解在+/-1.6附近 因此通过fsolve 来解非线性方程,不能得到其解析解,只能计算其数值解,通过限制其精度,达到自己的要求。

 fsolve('funx',-1.7)即可求得 -1.6376 - 0.0000i

 fsolve('funx',1.5)           1.6376 + 0.0000i

function [fx ] = funx( n )

%FUNX Summary of this function goes here

%   Detailed explanation goes here

lanmuda=1.55;

n1=1.6375696780514445567155543374853;

n2=1.6443618413936927969908352393948;

n3=1.6375696780514445567155543374853;

c1=n2^2/n1^2;

c2=n2^2/n3^2;

k0=2*pi/lanmuda;

r1=sqrt(n.^2-n1^2)*k0;

r2=sqrt(n2^2-n.^2)*k0;

r3=sqrt(n.^2-n3^2)*k0;

fx=r2.*5-atan(c1.*r1./r2)-atan(c2.*r3./r2)-pi;


end

东子qaQ
2014-05-30 · 超过68用户采纳过TA的回答
知道答主
回答量:187
采纳率:0%
帮助的人:157万
展开全部
可以:
clear all;clc;
for b=1:20;
a(b)=eval(solve('10+x=b','x'));
end
a =

Columns 1 through 13

-9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3

Columns 14 through 20

4 5 6 7 8 9 10
请采纳。
追问
这种方法解整数可以,解小数就有点困难了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式