楼主: ntf198602
4250 12

[问答] 求高手帮忙解决为什么这两个程序无法运行呢 [推广有奖]

  • 1关注
  • 1粉丝

已卖:1622份资源

教授

42%

还不是VIP/贵宾

-

威望
0
论坛币
5583 个
通用积分
41.9754
学术水平
3 点
热心指数
8 点
信用等级
3 点
经验
15204 点
帖子
955
精华
0
在线时间
1470 小时
注册时间
2009-3-28
最后登录
2024-12-27

楼主
ntf198602 发表于 2011-3-24 08:56:24 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
clear;clc;close all
[p,As] =deal(8,0.8);
[m,s] = deal(120,10);
lam =@(q)(2*p*(1-arrayfun(@(t)quad(@(x)normpdf(x,m,s),0,t),q))-(2+As)*p*q.*normpdf(q,m,s))./2;
q =linspace(1,10000);
qq=interp1(lam(q),q,0.8)


[c,As] =deal(2,0.8);
[m,s] = deal(120,10);
lam =@(q)2*c./(2*(1-arrayfun(@(t)quad(@(x)normpdf(x,m,s),0,t),q))-(2+As)*q.*normpdf(q,m,s));
q = 1:0.01:100;
qq=interp1(lam(q),q,7.8)

它老是出现说:??? Error using ==> interp1
The values of X should be distinct.
请问这是怎么回事啊
二维码

扫码加我 拉你入群

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

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

关键词:求高手 arrayfun Distinct normpdf interp 运行 程序 高手 解决 帮忙

沙发
小可儿 发表于 2011-3-24 09:48:22
1# ntf198602

第二个程序中将qq=interp1(lam(q),q,7.8)  改为 qq=interp1(q,lam(q),7.8), 再试试!

藤椅
小可儿 发表于 2011-3-24 09:52:10
1# ntf198602
第一个程序  将qq=interp1(lam(q),q,0.8)  改为 qq=interp1(q,lam(q),1.8)。 这是因为YI = INTERP1(X,Y,XI) ,您将自变量和因变量弄混了,另外,0.8不在您的差值区间内,可以将0.8修改为1到10000之间的任何一个数,程序就可以顺利执行了。祝您成功!

板凳
ntf198602 发表于 2011-3-24 10:00:02
非常感谢小可儿,但是下面的程序为什么可以运行呢?我就是模仿他的,里面的qq = interp1(lam(q),q,0.8),跟我的一样啊
clear;clc;close all
[p,c] =deal(8,2);
[m,s] = deal(120,10);
lam = @(q) (2*p*(1-arrayfun(@(t)quad(@(x)normpdf(x,m,s),0,t),q))-2*c)./(p*q.*normpdf(q,m,s)) -2;
q = linspace(1,100);
semilogy(q,lam(q));
qq = interp1(lam(q),q,0.8)

报纸
ntf198602 发表于 2011-3-24 10:12:57
上面那个例子中,我搞不清楚qq = interp1(lam(q),q,0.8)的真正意思,是当lam(q)=0.8时,求q的值吗?而如果是qq=interp1(q,lam(q),0.8),此时是不是求当q=0.8时,lam(q)呢?我其实是想求前一种,即当lam(q)=0.8时,求q的值。不知我上面的两个程序是否可以达到这个目的。如果改该怎么改呢?谢谢了

地板
小可儿 发表于 2011-3-24 10:38:52
5# ntf198602 呵呵!!你的理解:qq = interp1(lam(q),q,0.8)的真正意思,是当lam(q)=0.8时,求q的值,是正确的。我刚回答的匆忙了点,搞错了,两个地方都 不用改!
真正问题可能就出在lam的表达式上面,你看下lam和q的曲线图(plot(lam(q),q))就知道问题了。

7
ntf198602 发表于 2011-3-24 10:47:26
您好,我的图画出来了。如下,这有什么问题啊。我看不出来啊。对了,您能告诉我您的QQ吗?这样我请教您就方便点了

clip_image002.gif (1.59 KB)

clip_image002.gif

8
小可儿 发表于 2011-3-24 10:58:02
7# ntf198602
[p,As] =deal(8,0.8);
[m,s] = deal(120,10);
lam =@(q)(2*p*(1-arrayfun(@(t)quad(@(x)normpdf(x,m,s),0,t),q))-(2+As)*p*q.*normpdf(q,m,s))./2;
q =linspace(1,10000);
plot(lam(q),q)

图示是这个:
显然,当lam(q)=0.8时,q的值不止一个,所以才报错!上班时间,部方便QQ!

002.jpg (48.27 KB)

002.jpg

9
ntf198602 发表于 2011-3-24 11:12:55
您好,非常感谢。是不是插值只能对单调函数进行,如果出现了非单调的就会出现上述错误提示呢?如果是这样的话,我可以将其限制在某个范围之内呀。那样该怎么办呢?反正我就是要求出一个值出来。不行吗?

10
qibbxxt 发表于 2011-3-24 14:51:48
插值只能是对单调函数了,如果非单调,就会出现2义性
也可以用求解方程的办法求解的
  1. fzero或者fsolve
复制代码

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-26 10:44