楼主: 六月冰封
4234 10

[问答] matllab数值方法求解函数 [推广有奖]

  • 0关注
  • 0粉丝

小学生

92%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
2 点
热心指数
3 点
信用等级
0 点
经验
61 点
帖子
9
精华
0
在线时间
8 小时
注册时间
2013-9-5
最后登录
2014-12-3

楼主
六月冰封 发表于 2014-8-11 22:29:01 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
小弟在用数值解析的方法求解一个函数,程序如下,但是计算不出结果,结果出错,哪位大侠帮忙调整一下,谢谢
    a=xlsread('F:\sci4\data\parameters\parameters.xls',1,'D3:D528')
    b=xlsread('F:\sci4\data\parameters\parameters.xls',1,'C3:C528')
    m=xlsread('F:\sci4\data\parameters\parameters.xls',1,'B3:B528')
    n=xlsread('F:\sci4\data\parameters\parameters.xls',1,'A3:A528')
    x=ones(526,1)*(-0.1)
f=@(y)(y-y.*x.^2+x.*(y.^2.*x.^2-y.^2+b.^2.*m.^2).^0.5)./(b.*(y-y.*x.^2+x.*(y.^2.*x.^2-y.^2+n.^2).^0.5))-a;
fzero(f,0)


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:数值方法 Lab Atl Mat parameters 程序

parameters.xls
下载链接: https://bbs.pinggu.org/a-1608606.html

91 KB

参数值

沙发
zsuphoenix 发表于 2014-8-12 01:39:36
N = size(a,1);
xx = zeros(N,1);
for i = 1:N
f=@(y)(y-y.*x(i).^2+x(i).*(y.^2.*x(i).^2-y.^2+b(i).^2.*m(i).^2).^0.5)./(b(i).*(y-y.*x(i).^2+x(i).*(y.^2.*x(i).^2-y.^2+n(i).^2).^0.5))-a(i);
xx(i) = fzero(f,0);
end

藤椅
zsuphoenix 发表于 2014-8-12 01:44:02
你的函数是1个输入,N个输出的,其中多个方程无法没有实数解吧

板凳
六月冰封 发表于 2014-8-12 08:46:16
zsuphoenix 发表于 2014-8-12 01:44
你的函数是1个输入,N个输出的,其中多个方程无法没有实数解吧
是的,提示的错误信息??? Operands to the || and && operators must be convertible to logical scalar values.

Error in ==> fzero at 309
    elseif ~isfinite(fx) || ~isreal(fx)
如何解决

报纸
六月冰封 发表于 2014-8-12 08:47:57
zsuphoenix 发表于 2014-8-12 01:39
N = size(a,1);
xx = zeros(N,1);
for i = 1:N
非常感谢啊

地板
六月冰封 发表于 2014-8-14 17:49:50
zsuphoenix 发表于 2014-8-12 01:39
N = size(a,1);
xx = zeros(N,1);
for i = 1:N
你好,现在有个问题,就是利用fzero求解方程的时候,每组参数的根并不都是出现在0附近,也就是说
xx(i)=fzero(f,0)求解的根是不对的,如何修改啊,因为数据量比较大,不可能每组参数都去利用ezplot.如何解决。谢谢

7
zsuphoenix 发表于 2014-8-14 19:10:25
x = fzero(fun,x0,options)
换初始点,换算法,设置更严格的收敛条件,我看了下,好像也就第27,28,91,215,277,462的函数值的绝对值大于1,其他都在0附近吧,自己手动处理下呗

8
六月冰封 发表于 2014-8-14 19:25:16
zsuphoenix 发表于 2014-8-14 19:10
x = fzero(fun,x0,options)
换初始点,换算法,设置更严格的收敛条件,我看了下,好像也就第27,28,91,215,277 ...
我任意试了几组,好多在0附近获取的都是奇值点,此时的exitflag一般都是-5,通过explot观察后,好多都需要重新设置初始点,主要是数据量太大了,棘手的很

9
zsuphoenix 发表于 2014-8-14 19:49:15
奇值点是什么意思

10
zsuphoenix 发表于 2014-8-14 19:57:10
options = optimset('fzero');
options.Display = 'off';
rng('default');
for i = 1:N
    f=@(y)(y-y.*x(i).^2+x(i).*(y.^2.*x(i).^2-y.^2+b(i).^2.*m(i).^2).^0.5)./(b(i).*(y-y.*x(i).^2+x(i).*(y.^2.*x(i).^2-y.^2+n(i).^2).^0.5))-a(i);
    [xx(i),fx(i),exitflag,output] = fzero(f,0,options);     
    aa = 0;
    while exitflag~=1
        aa = aa + 1;
        x0 = 100*randn(1);
            if ~isinf(f(x0)) && isreal(f(x0))
                [xx(i),fx(i),exitflag,output] = fzero(f,x0,options);                 
            end
        if aa>1000
            break
        end
    end
end
find(isnan(fx)|abs(fx)>1)

    58
    91
    96
   220
   251
   277
   406
   437
   463
   468
   495
   499
   522
   524

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-24 13:22