24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1892  |  回复: 10

bluethky

木虫 (著名写手)

[求助] matlab程序错误,提示如下【弄了半夜还是不行】已有2人参与

function [x,y,Y]=levydistrintheorytest(t0,lambda,T,a,b);
%  计算理论的二维levy分布的图象   画出来的3维曲面图
%   t0 :levy walk  趋于零的时间
%  lambda :幂律值
%   T:时间
%   a: 离散的大步长的最大值
%   b:小步长的最大值


error=0.125/180*pi;  %假定平行于坐标轴的误差角度
syms u
c=-gamma(2-lambda)*t0^(lambda-1)*cos(pi*lambda/2)/lambda;
h1=20;  %大的离散步长
h2=0.1; %小的离散步长
x1=-a:h1:-b;
x2=-(b-h2):h2b-h2);
x3=b:h1:a;
x=[x1,x2,x3];
disp('%%%%%%%%%%%计算的次数为%%%%%%%%%%%%%%%')
N=length(x)
y=x;
Z=zeros(N,N);
for i=1:1   %x坐标
    i
    for j=1:N  % y坐标
        theta=angle(complex(x(i),y(j)));
        if theta<error && theta>-error  % x轴正半轴
            Z(j,i)=double(int(cos(u.*x(i)/(c*T)^(1/lambda))*exp(-(abs(u))^lambda)./pi+cos(1/u.*x(i)/(c*T)^(1/lambda))*exp(-1/(abs(u))^lambda)/u^2./pi,0,1));
        elseif     theta<pi/2+error && theta>pi/2-error  % y轴正半轴
            Z(j,i)=double(int(cos(u.*y(j)/(c*T)^(1/lambda))*exp(-(abs(u))^lambda)./pi+cos(1/u.*y(j)/(c*T)^(1/lambda))*exp(-1/(abs(u))^lambda)/u^2./pi,0,1));
        elseif   theta>pi-error || theta<-pi+error  %x轴负半轴
            Z(j,i)=double(int(cos(u.*x(i)/(c*T)^(1/lambda))*exp(-(abs(u))^lambda)./pi+cos(1/u.*x(i)/(c*T)^(1/lambda))*exp(-1/(abs(u))^lambda)/u^2./pi,0,1));
        elseif   theta>-pi/2-error && theta<-pi/2+error   %y轴负半轴
            Z(j,i)=double(int(cos(u.*y(j)/(c*T)^(1/lambda))*exp(-(abs(u))^lambda)./pi+cos(1/u.*y(j)/(c*T)^(1/lambda))*exp(-1/(abs(u))^lambda)/u^2./pi,0,1));
        else
            Z(j,i)=double(int(cos(u.*x(i)/(c*T)^(1/lambda)/sin(theta))*exp(-(abs(u))^lambda)./pi+cos(1/u.*x(i)/(c*T)^(1/lambda)/sin(theta))*exp(-1/(abs(u))^lambda)/u^2./pi,0,1))*(double(int(cos(u.*y(j)/(c*T)^(1/lambda)/cos(theta))*exp(-(abs(u))^lambda)./pi+cos(1/u.*y(j)/(c*T)^(1/lambda)/cos(theta))*exp(-1/(abs(u))^lambda)/u^2./pi,0,1)));
            %zy=(double(int(cos(u.*y(j)/(c*T)^(1/lambda)/cos(theta))*exp(-(abs(u))^lambda)./pi+cos(1/u.*y(j)/(c*T)^(1/lambda)/cos(theta))*exp(-1/(abs(u))^lambda)/u^2./pi,0,1)));
            %Z(j,i)=zx*zy;
        end
    end
end      
Y=Z;
end







错误提示;


Error using mupadmex
Error in MuPAD command: DOUBLE cannot convert the input expression into a
double array.

If the input expression contains a symbolic variable, use the VPA function
instead.

Error in sym/double (line 710)
        Xstr = mupadmex('symobj::double', S.s, 0);

Error in levydistrintheorytest (line 37)
            Z(j,i)=double(int(cos(u.*x(i)/(c*T)^(1/lambda)/sin(theta))*exp(-(abs(u))^lambda)./pi+cos(1/u.*x(i)/(c*T)^(1/lambda)/sin(theta))*exp(-1/(abs(u))^lambda)/u^2./pi,0,1))*(double(int(cos(u.*y(
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
回帖支持 ( 显示支持度最高的前 50 名 )

wurongjun

专家顾问 (职业作家)

【答案】应助回帖

感谢参与,应助指数 +1
你的那个u值有问题!
你定义的它是一个符号变量:syms u
程序里又把它当数值变量使用,所以出错!
至于你说的在命令行可以运行,原因可能是,你的work space里面已经给u赋值了,你可以清空space再看一下!
纵观程序 u是需要赋值的!
善恶到头终有报,人间正道是沧桑.
3楼2014-05-10 06:53:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

bluethky

木虫 (著名写手)

引用回帖:
3楼: Originally posted by wurongjun at 2014-05-10 06:53:34
你的那个u值有问题!
你定义的它是一个符号变量:syms u
程序里又把它当数值变量使用,所以出错!
至于你说的在命令行可以运行,原因可能是,你的work space里面已经给u赋值了,你可以清空space再看一下!
纵观程序 u是 ...

我把它设置成   int(f1,'u',0,1)这种类型的,系统提示对Undefined function or variable 'u'。。。。。很诡异
5楼2014-05-10 10:14:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

bluethky

木虫 (著名写手)

我在每个int前面加了一个simplify后可以算出结果,但是速度不是一般的慢,你还有其他好方法没有?
6楼2014-05-10 12:27:28
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wurongjun

专家顾问 (职业作家)

【答案】应助回帖

符号计算与数值计算混合使用是Matlab程序的大忌!
丧失了快速计算得优点!
你可以把(0,1)区间划分为更小的区间,然后考虑数值积分!
善恶到头终有报,人间正道是沧桑.
7楼2014-05-10 17:31:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yogort

铁杆木虫 (正式写手)

这是不是就是分段函数要画图啊?

» 本帖已获得的红花(最新10朵)

9楼2014-05-11 18:46:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

bluethky

木虫 (著名写手)

程序本身在命令窗口可以计算,,,但是在m文件中一直报错。。。。我也没找到错哪了,,,求大侠给点意见,问度娘也没有找出原因。。。。。
太困了。。。。先谢谢了!
早安!
2楼2014-05-10 01:35:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

bluethky

木虫 (著名写手)

引用回帖:
3楼: Originally posted by wurongjun at 2014-05-10 06:53:34
你的那个u值有问题!
你定义的它是一个符号变量:syms u
程序里又把它当数值变量使用,所以出错!
至于你说的在命令行可以运行,原因可能是,你的work space里面已经给u赋值了,你可以清空space再看一下!
纵观程序 u是 ...

由于程序里是关于u在(0,1)的积分,我们不是都是对其先设置成,符号变量在进行积分吗?我不是太明白。。不知我应该怎样将其设置成数值变量?求老师指点一下。。。
不过你的解答应该是正确的
4楼2014-05-10 10:03:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

bluethky

木虫 (著名写手)

引用回帖:
7楼: Originally posted by wurongjun at 2014-05-10 17:31:40
符号计算与数值计算混合使用是Matlab程序的大忌!
丧失了快速计算得优点!
你可以把(0,1)区间划分为更小的区间,然后考虑数值积分!

确实速度老慢了。。。。区间不能再少了,,,我现在考虑用inline  然后用quad,但是由于其中有其他变量,提示错误
8楼2014-05-10 19:31:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

bluethky

木虫 (著名写手)

送红花一朵
引用回帖:
9楼: Originally posted by yogort at 2014-05-11 18:46:44
这是不是就是分段函数要画图啊?

本来是一个0到无穷的积分,我在1处截断了,再将1后面的积分转换到0到1,用数值的方法算出来了,谢谢大侠!
10楼2014-05-12 12:50:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 逃课的小屁孩 的主题更新
信息提示
请填处理意见