全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 MATLAB等数学软件专版
2015-6-28 08:29:33
function y=myhs(x)
y=0;
x=x(1);
y=x(2);
z=x(3);
d=[1.1101e+03;1.0035e+03;941.2414;971.2918;1.1419e+03]
for i=1:5
    y=y-log(x(1)/x(2)*((d(i)-x(3))/x(2))^(x(1)-1)*exp(-(d(i)-x(3))/x(2))^(x(1)))
end
错了:
d不需要在函数里面:
function Y=myhs(b,XX)
y=0;
alpha=b(1);
beta=b(2);
lambda=b(3);
d=XX;%下面的函数形式也错了,自己把原公式求对数,化成简单形式,然后再求和。(我没改)。
for i=1:5
    y=y-log(x(1)/x(2)*((d(i)-x(3))/x(2))^(x(1)-1)*exp(-(d(i)-x(3))/x(2))^(x(1)))
end
Y=-y;%看你用的那个minPowell(?)函数,如果是最小化,就不要了;如果是最大化就留着。(这一句或者错了)
二维码

扫码加我 拉你入群

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

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

2015-6-28 08:36:55
应该设定h=0.0000001
alpha=max([b(1) h])
beta=max([b(2) h])
这是保证两个大于0.
然后使用fminunc应该就可以了。
二维码

扫码加我 拉你入群

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

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

2015-6-28 10:45:13
magicsun 发表于 2015-6-28 08:29
function y=myhs(x)
y=0;
x=x(1);
d=XX;你好,请问这句是什么意思?
二维码

扫码加我 拉你入群

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

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

2015-6-28 11:33:48
XX就是你的观测值。function Y=myhs(b,XX),b是参数,b相当于一般最优化书中的x。
二维码

扫码加我 拉你入群

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

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

2015-6-29 09:36:02
magicsun 发表于 2015-6-28 11:33
XX就是你的观测值。function Y=myhs(b,XX),b是参数,b相当于一般最优化书中的x。
非常感谢~~~
二维码

扫码加我 拉你入群

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

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

2015-7-1 17:10:58
magicsun 发表于 2015-6-28 11:33
XX就是你的观测值。function Y=myhs(b,XX),b是参数,b相当于一般最优化书中的x。
大神,麻烦问一下这个方程用MATLAB怎么编写程序。
这是我自己编的,不过好像这样的方式是对实数应用的,望大神指点~~~
function y=myfc(b)
syms r
t(1)=1.1101e+03;
t(2)=1.0035e+03;
t(3)=941.2414;
t(4)=971.2918;
t(5)=1.1419e+03;
s1=0;s2=0;s3=0;s4=0;s5=0;
for i=1:5
    s1=s1+log(t(i)-r);
    s2=s2+(t(i)-r)^b*log(t(i)-r);
    s3=s3+(t(i)-r)^b;
end
y=1/b+1/5*s1-s2/s3;
附件列表
二维码

扫码加我 拉你入群

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

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

2015-7-1 17:51:32
r是已知的,不需要syms。这个是解方程。
二维码

扫码加我 拉你入群

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

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

2015-7-1 18:09:49
magicsun 发表于 2015-7-1 17:51
r是已知的,不需要syms。这个是解方程。
恩,是应用到解方程里的,但是如果不用syms,运行时会提示r未定义~~
二维码

扫码加我 拉你入群

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

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

2015-7-1 18:10:35
magicsun 发表于 2015-7-1 17:51
r是已知的,不需要syms。这个是解方程。
我上传了一个word文档,是关于公式的,您看看~~~
二维码

扫码加我 拉你入群

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

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

2015-7-1 18:18:11
r既然已知,就直接写上数。
二维码

扫码加我 拉你入群

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

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

2015-7-1 18:24:39
magicsun 发表于 2015-7-1 18:18
r既然已知,就直接写上数。
其实r是不知道的,我是假设知道~~~
二维码

扫码加我 拉你入群

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

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

2015-7-1 18:45:44
不明白你什么意思,不知道的话,你怎么解二元的方程?根本不可能吧?
二维码

扫码加我 拉你入群

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

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

2015-7-1 19:30:48
magicsun 发表于 2015-7-1 18:45
不明白你什么意思,不知道的话,你怎么解二元的方程?根本不可能吧?
就是假设r知道,方程不知道的参数就剩b了,这样应该可以解出来b吧,b应该是关于r的式子吧~~~
二维码

扫码加我 拉你入群

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

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

2015-7-1 20:13:41
不清楚,这是高阶方程,而且未知数还在分母中,不太清楚用matlab怎么解。如果是数的话,还可以求。但有未知字母,真不了解。
二维码

扫码加我 拉你入群

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

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

2015-7-1 20:28:21
magicsun 发表于 2015-7-1 20:13
不清楚,这是高阶方程,而且未知数还在分母中,不太清楚用matlab怎么解。如果是数的话,还可以求。但有未知 ...
我查找的文献说是用二分法求,我觉得我编的公式应该用问题,大神你能帮我看看我编的公式吗?
二维码

扫码加我 拉你入群

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

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

2015-7-2 06:47:38
函数看上去没问题。
二维码

扫码加我 拉你入群

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

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

2015-7-2 17:09:23
magicsun 发表于 2015-7-2 06:47
函数看上去没问题。
我在函数里用了打屏语句,到s2这句就出现错误了,所以是不是s2这样编写不太对?
二维码

扫码加我 拉你入群

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

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

2015-7-2 17:37:37
打屏语句?这是什么?
二维码

扫码加我 拉你入群

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

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

2015-7-2 18:07:45
magicsun 发表于 2015-7-2 17:37
打屏语句?这是什么?
就是disp语句
二维码

扫码加我 拉你入群

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

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

2015-7-3 08:49:06
你不用disp会不会出结果?
二维码

扫码加我 拉你入群

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

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

2015-7-3 11:28:01
magicsun 发表于 2015-7-3 08:49
你不用disp会不会出结果?
不能,程序报错
二维码

扫码加我 拉你入群

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

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

2015-7-3 11:55:20
你把你写的传上来,看看。
二维码

扫码加我 拉你入群

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

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

2015-7-3 16:49:38
magicsun 发表于 2015-7-3 11:55
你把你写的传上来,看看。
function y=myfc(b)
syms r
t(1)=1.1101e+03;
t(2)=1.0035e+03;
t(3)=941.2414;
t(4)=971.2918;
t(5)=1.1419e+03;
s1=0;s2=0;s3=0;s4=0;s5=0;
for i=1:5
     s1=s1+log(t(i)-r);
     s2=s2+(t(i)-r)^b*log(t(i)-r);
     s3=s3+(t(i)-r)^b;
end
y=1/b+1/5*s1-s2/s3;
二维码

扫码加我 拉你入群

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

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

2015-7-3 19:38:18
我的意思是你怎么解,不是函数。
二维码

扫码加我 拉你入群

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

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

2015-7-4 10:03:22
magicsun 发表于 2015-7-3 19:38
我的意思是你怎么解,不是函数。
我用的是二分法~~~
function y=erfen(fun,a,b,esp)
if nargin<4
    esp=1e-4;
end
if feval(fun,a)*feval(fun,b)<0
    n=1;
    c=(a+b)/2;
    while c>esp
        if feval(fun,a)*feval(fun,c)<0
            b=c;
            c=(a+b)/2;
        elseif feval(fun,c)*feval(fun,b)<0
            a=c;
            c=(a+b)/2;
        else
            y=c;
            esp=10000;
        end
        n=n+1;
    end
        y=c;
elseif feval(fun,a)==0
            y=a;
elseif feval(fun,b)==0
                y=b;
else disp('these,may not be a root in the intercal');
end
n
二维码

扫码加我 拉你入群

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

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

2015-7-4 13:23:02
学习了
二维码

扫码加我 拉你入群

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

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

2015-7-4 14:25:00
雨後彩虹 发表于 2015-7-4 10:03
我用的是二分法~~~
function y=erfen(fun,a,b,esp)
if nargin
你这二分法跟原先你写的方程也没关系吧?我觉得你原先似乎说r假定已知,当成字符,如果是二元方程的话,你比如
ax^2+bx+c=0,你可以直接解出来x的表达式(用字母a,b和c表示的),你的方程表示不了(我觉得)。而这二分法似乎将r视为已知,然后解一个一元(beta)的很复杂的方程的数值解。所以我觉得你原先的函数不应该syms r。而应该在()中直接写上r,然后解方程时,你可以将已知的r带进去吧?
二维码

扫码加我 拉你入群

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

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

2015-7-4 15:16:53
magicsun 发表于 2015-7-4 14:25
你这二分法跟原先你写的方程也没关系吧?我觉得你原先似乎说r假定已知,当成字符,如果是二元方程的话,你 ...
这个二分法程序跟方程没有关系,是源代码~~~直接写成r应该不对,会提示r未定义
二维码

扫码加我 拉你入群

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

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

2015-7-4 17:07:05
解方程,必须得二分法?我怎么记得直接solve一下就可以?
二维码

扫码加我 拉你入群

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

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

2015-7-6 10:52:17
magicsun 发表于 2015-7-4 17:07
解方程,必须得二分法?我怎么记得直接solve一下就可以?
我是在文献上看的,不管什么方法,我觉得我那个方程编的貌似有问题
二维码

扫码加我 拉你入群

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

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

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群