24小时热门版块排行榜    

查看: 1966  |  回复: 8

小刘8885

木虫 (正式写手)

[求助] Matlab,解复数方程

怎么解这个方程?如下图。其中x1和x2都为复数,q和a为已知的常数。x1和x2为数据文件,如下图所示。怎么导入x1和x2并解出一系列对应的y值,并且将求的的y值以类似x1的文件形式导出来,即分为实部和虚部导出?
公式



数据
回复此楼

» 本帖附件资源列表

  • 欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
    本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:xiaomuchong@tal.com
  • 附件 1 : shuju.txt
  • 2012-05-21 20:01:14, 2.77 K

» 猜你喜欢

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

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dingd

铁杆木虫 (职业作家)

【答案】应助回帖


感谢参与,应助指数 +1
小刘8885: 金币+1, 谢谢参与 2012-05-21 21:10:47
用1stOpt试试,比较简单,下面假设q=3.5, a=0.25,以前10个数据为例计算:
CODE:
Constant q=3.5,a=0.25;
ConstStr x1=a1+b1*i,x2=a2+b2*i;
LoopConstant
a1=[1.43,1.44,1.46,1.45,1.45,1.44,1.45,1.45,1.44,1.44],
b1=[0.02,0.04,0.05,0.02,0.05,0.06,0.06,0.05,0.07,0.09],
a2=[0.009780429,0.019290123,0.023456558,0.009512485,0.023781213,0.028935185,0.028537455,0.023781213,0.033757716,0.043402778],
b2=[0.004890215,0.008768238,0.009773566,0.003658648,0.00849329,0.009645062,0.008917955,0.006994474,0.009377143,0.011421784];
ComplexStr = i;
ComplexPar y;
Function (1-q)*(x2-x1)/x2^a*y^a-y+x1=0;

y.实部        y.虚部
26.0549308935745        -3.39054421631229
21.3634333717575        -2.15713840435354
20.5571962148911        -1.69871196786957
27.2314765798707        -2.70147269442524
20.4345049478304        -1.33862681249657
19.0671427961527        -0.949477270203328
19.371747766277        -0.850707043007433
20.575089935508        -0.966582317014032
18.2424521984911        -0.447405238620689
16.8276617636246        -0.0454317407652095
2楼2012-05-21 20:54:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lijie169

铜虫 (著名写手)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
小刘8885: 金币+8, ★★★很有帮助 2012-05-22 08:50:14
先列上matlab代码
CODE:
function f=main(name,a,q)
data=load(name);
x1=data(:,1)+data(:,2)*i;
x2=data(:,3)+data(:,4)*i;
x0=zeros(length(data),1);
f=fsolve(@(y)func(a,q,x1,x2,y),x0);
r=real(f);
r(:,2)=imag(f);
save('result.txt','r','-ascii');
function f=func(a,q,x1,x2,y)
f=(1-q).*(x1-x2)./x2^a.*y^a-y+x1;
end
end

首先,在matlab下面新建一个main.m的文件,复制上我写的代码。然后把数据文件拷贝到main.m的目录下。
name就是你的数据文件,里面除了列之间的数据,不能有其他的东西,数据文件的名字英文。a,q不用我多说
调用格式是:main('data.txt',1,5)
这是一个示例data.txt就像相当于你的文件的名字。

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

3楼2012-05-22 07:09:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

小刘8885

木虫 (正式写手)

送鲜花一朵
引用回帖:
3楼: Originally posted by lijie169 at 2012-05-22 07:09:32:
先列上matlab代码

function f=main(name,a,q)
data=load(name);
x1=data(:,1)+data(:,2)*i;
x2=data(:,3)+data(:,4)*i;
x0=zeros(length(data),1);
f=fsolve(@(y)func(a,q,x1,x2,y),x0);
r=real(f);
r(:,

谢谢!我将你的代码写入之后运行怎么出错了?这是什么原因呢?求解。
>> main('2.txt',1/3,0.96)
??? Error: File: D:\Matlab\work\main.m Line: 6 Column: 11
"identifier" expected, "(" found.
4楼2012-05-22 08:49:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

小刘8885

木虫 (正式写手)

引用回帖:
3楼: Originally posted by lijie169 at 2012-05-22 07:09:32:
先列上matlab代码

function f=main(name,a,q)
data=load(name);
x1=data(:,1)+data(:,2)*i;
x2=data(:,3)+data(:,4)*i;
x0=zeros(length(data),1);
f=fsolve(@(y)func(a,q,x1,x2,y),x0);
r=real(f);
r(:,

还有就是能不能对每行的程序做个简单的注释?我是初学者,很多都不太明白,求高人赐教。感激不尽。
5楼2012-05-22 08:52:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lijie169

铜虫 (著名写手)

建议使用2楼的方案,matlab解这个需要初始解,初始解给的不好,木有答案!!!!
6楼2012-05-22 09:36:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xcj3630385

木虫 (小有名气)

长江11号

function f= f_main(data, a, q)
x1 = data(:,1) + data(:,2)*i;
x2 = data(:,3) + data(:,4)*i;

x0 = zeros(length(data),1);
f = fsolve(@(y)func(a,q,x1,x2,y), x0)
r = [real(f), imag(f)];
save('result.txt','r','-ascii');

function f = func(a, q, x1, x2, y)
f = (1-q).*(x2-x1)./(x2.^a).*(y.^a) - y + x1;
%变形式。
长江11号
7楼2012-05-25 12:33:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xcj3630385

木虫 (小有名气)

长江11号

引用回帖:
7楼: Originally posted by xcj3630385 at 2012-05-25 12:33:54
function f= f_main(data, a, q)
x1 = data(:,1) + data(:,2)*i;
x2 = data(:,3) + data(:,4)*i;

x0 = zeros(length(data),1);
f = fsolve(@(y)func(a,q,x1,x2,y), x0)
r = ;
save('result.txt','r','-asci

调用方式如下:

clear all;
clc;

data = load('name.txt');  %name即调用文件的名字
a = 0.2;   %任意值
q = 0.06;  %任意值
f_main(data, a, q);
长江11号
8楼2012-05-25 12:37:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

小刘8885

木虫 (正式写手)

引用回帖:
8楼: Originally posted by xcj3630385 at 2012-05-25 12:37:44
调用方式如下:

clear all;
clc;

data = load('name.txt');  %name即调用文件的名字
a = 0.2;   %任意值
q = 0.06;  %任意值
f_main(data, a, q);

9楼2012-05-25 12:41:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 小刘8885 的主题更新
信息提示
请填处理意见