作者kevinjean (Kevin)
看板MATLAB
标题Re: [问题] 回圈中多组答案选出Max
时间Mon Dec 7 12:13:36 2015
谢谢celestialgod!
简单来说,我有三个公式想要记算,分别是S1, F2, A2的算式
但各自公式成立之前都有一些不一样的限制式需要被满足,
如果限制式有 > 0才计算数值,不然就显示0。
所以,
1. 在S1的前面应该要有:
if......(S1成立的条件式)
S1 = ......
else
S1 = 0
if......(F2成立的条件式)
F2 = ......
else
F2 = 0
if......(A2成立的条件式)
A2 = ......
else
A2 = 0
2. 这样一轮下来应该就会有S1, F2, A2的值 (有数字或是0)
接着去比较在b = 0, D = 0.1的状况下哪个是Max并且print name出来
然後回圈後在b = 0.1, D = 0.1的状况下再比较一次
...经过很多轮
然後回圈後在b = 1, D = 1的状况下再比较一次
3. 最後希望可以整理出在不同b跟D的组合下,什麽时候S1, F2, A2会是max
然後想要画出一个图
http://i.imgur.com/NNTHMT9.jpg
像右边图,在不同的组合下面max的值是哪一个
不好意思再麻烦各位帮我解惑了 > <
谢谢!
※ 引述《celestialgod (天)》之铭言:
有些问题看得不是很懂...
有问题推文问再回你吧~"~
q=0.9;
a=0.9;
c0=0.2;
c1=0.01;
X=2^(1/2);
[b, D] = meshgrid(0:0.1:1, 0.1:0.1:1);
S1 = (q*(a+b(:))-2*c0).^2/(16*(q-c1));
F2 = (q^2*(2*D(:) + a - b(:)) .* (a*q - 2*c0 + b(:)*q))/(16*(c1 - q).^2);
A2 = ((X*q*(q*(a + b(:))-2*c0)).^2)/((4*(q-c1)).^3);
Y = [S1, F2, A2];
Y(q - b(:) > 0 & q*(q + b(:)) - 2*c0 > 0) = 0;
if q - c1 <= 0
Y(:) = 0;
end
[Z, code] = max(Y, [], 2);
names = {'S1', 'F2', 'A2'};
maxNames = arrayfun(@(x) names{x}, code, 'uni', false);
储存的话,要同时存chr跟数字的话,就用open跟fprintf解决吧,网路上很多
存数字就用dlmwrite就好
※ 引述《kevinjean (Kevin)》之铭言:
: 各位版上前辈好,
: 我想要请教几个问题希望大家可以帮助我 > <
: ---
: q=0.9, a=0.9, c0=0.2, c1=0.01, X=2^(1/2)
: for b=0:0.1:1
: for D=0.1:0.1:1
: if q - b > 0 & q - c1 > 0 & q*(q + b) - 2*c0 > 0
: S1 = (q*(a+b)-2*c0)^2/(16*(q-c1))
: F2 = (q^2*(2*D + a - b)*(a*q - 2*c0 + b*q))/(16*(c1 - q)^2)
: A2 = ((X*q*(q*(a + b)-2*c0))^2)/((4*(q-c1))^3)
: else
: S1 = 0
: F2 = 0
: A2 = 0
: end
: end
: Y = [S1 F2 A2]
: Z = max(Y)
: fprintf('Max = \n',Z)
: end
: ---
: 总而言之我希望调控b跟D分别跑出一组一组的S1, F2, A2,
: 并且在每一组内找出这三个中最大的值,显示对应的代号
: 所以应该会有10 x 9 = 90组Max的值,
: 可能像是
: Max = S1
: Max = S1
: Max = S1
: Max = S1
: Max = F2
: Max = F2
: Max = A2
: Max = A2
: Max = A2
: Max = A2
: Max = A2
: Max = A2
: ...
: 目前想请大家帮的忙有几个:
: 1. 我无法在每一个b - D组合得到一个Max值
: 跑完之後他会先出现很多组S1, F2, A2,
: 然後在最後一组之後出现:
: Y = [xxx yyy zzz]
: Z = yyy (假设是最大值)
: 而不是每一笔资料都是一个Max值
: 2. 我无法得到代号,而是数值
: 我知道很直觉的我的矩阵里面放的是S1, F2, A2计算出来的值,
: 但我应该要怎麽写才可以让Max出来的是代号呢?
: 3. 我无法储存最後得到的Max值
: 假设顺利得到了90组Max值,我要怎麽储存他?
: 因为目前好像就是会在Matlab出现90行的文字,
: 但我希望可以把它储存为
: (b1, D1, Max1)
: (b2, D1, Max2)
: (b3, D1, Max3)
: ...
: 再请大家帮助我了,谢谢各位 > <
--
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.109.74.87
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MATLAB/M.1449458146.A.187.html
※ 编辑: celestialgod (140.109.74.87), 12/07/2015 11:18:04
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.113.250.42
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MATLAB/M.1449461619.A.74F.html
※ 编辑: kevinjean (140.113.250.42), 12/07/2015 12:14:06
1F:→ celestialgod: 1. 计算後,我再取条件等於0,不是一样? 12/07 12:17
2F:→ celestialgod: 如果你要个别条件,在个别加就好 12/07 12:18
3F:→ celestialgod: 2. 我不知道你在写什麽... 12/07 12:18
4F:→ kevinjean: 例如(b,D,max)=(0,0.1,S1);(0.1,0.1,S1);(0.2,0.1,S1) 12/07 12:21
5F:→ kevinjean: (0.3,0.1,S1);...;(0.5,0.5,A2);(0.6,0.5,A2);... 12/07 12:21
6F:→ kevinjean: ...;(1,0.9,F2);(1,1,F2) 这样的输出 12/07 12:22
7F:→ celestialgod: 所以我前面不就说可以用fprintf做? 12/07 12:32
8F:→ celestialgod: 前面程式OUTPUT是错的,你也没发现... 12/07 13:07
9F:→ celestialgod: 你到底有没有跑过我写的程式,再来问问题? 12/07 13:07
10F:→ kevinjean: 有我有跑过了,谢谢!目前先看到的状况就是有一连串 12/07 13:19
11F:→ kevinjean: S1, F2, A2。我还没有先对output的内容,我会再研究 12/07 13:19
12F:→ kevinjean: 一下,谢谢celestialgod 12/07 13:20
13F:→ celestialgod: 所以output应该都给你了,我不知道你後面要干嘛就是 12/07 13:23
14F:推 sunev: 限制式只限制b , 解出来刚好是一个开区间。 12/07 13:38
15F:→ sunev: S1 F2 A2又刚好只是b D的二次式,应该可以手算才是 12/07 13:39