フィルターのクリア

SUbstitions

1 回表示 (過去 30 日間)
mortain Antonio
mortain Antonio 2011 年 5 月 25 日
Hello,
I have a vector of 15 elemetnts which are functions of 4 elements, here below represented:
h(i)=[1, csi_1, csi_2, csi_3, csi_4, csi_1^2 - 1, csi_1*csi_2, csi_1*csi_3, csi_1*csi_4, csi_2^2 - 1, csi_2*csi_3, csi_2*csi_4, csi_3^2 - 1, csi_3*csi_4, csi_4^2 - 1]
I have 15 different vectors with the valus which those variables should have. E.g. s=[1 2 3 4] gives:
[1, 1, 2, 3, 4, 0, 2, 3, 4, 3, 6, 8, 8, 12, 15]
DO you have any suggestion how to impose for the 15 different cases the different values of csi_i in order to obtain a matrix of only coefficients.
At the moment the expression in csi_i are in the form h(1)=1, h(2)=csi_1, h(3)=csi_2 etc...
I tried with subs but I did not succeed.
THank you very much for your help and suggestions! ANtonio

採用された回答

Matt Fig
Matt Fig 2011 年 5 月 25 日
M = @(csi) [1, csi(1), csi(2), csi(3), csi(4), csi(1)^2 - 1,...
csi(1)*csi(2), csi(1)*csi(3), csi(1)*csi(4),...
csi(2)^2 - 1, csi(2)*csi(3), csi(2)*csi(4),...
csi(3)^2 - 1, csi(3)*csi(4), csi(4)^2 - 1];
s=[1 2 3 4];
M(s) % You can use this directly or assign the results to an array.
%
%
%
% EDIT
If you want to be able to do it all at once for n-by-4, then:
M = @(csi) [ones(size(csi,1),1), csi(:,1), csi(:,2), csi(:,3), csi(:,4),...
csi(:,1).^2 - 1,csi(:,1).*csi(:,2), csi(:,1).*csi(:,3),...
csi(:,1).*csi(:,4), csi(:,2).^2 - 1, csi(:,2).*csi(:,3),...
csi(:,2).*csi(:,4), csi(:,3).^2 - 1, csi(:,3).*csi(:,4),...
csi(:,4).^2 - 1];
s = rand(15,4);
M(s)
  8 件のコメント
mortain Antonio
mortain Antonio 2011 年 5 月 25 日
hit return it's the most important thing :-)
SOrry for being so annoying.....I know I should handle such stupid things on my own!
Shall I send to you the whole program, to see if it's possible to use H instead of hard coding the csi(1), csi(2) etc in M ?
Again, thanks for patience!
Matt Fig
Matt Fig 2011 年 5 月 26 日
I'll take a look at it.

サインインしてコメントする。

その他の回答 (2 件)

mortain Antonio
mortain Antonio 2011 年 5 月 25 日
I tried to use your answer but my program does not allow me anymore to do the derivation (here reported one) can you help with that, please?
csi_1=sym('csi_1');
csi_2=sym('csi_2');
csi_3=sym('csi_3');
csi_4=sym('csi_4');
csi_v(1)=csi_1;
csi_v(2)=csi_2;
csi_v(3)=csi_3;
csi_v(4)=csi_4;
b=sum(diag((csi_v).'*csi_v));
H(1)=1;
i=1;
H(2)=(-1)^(i)*exp(0.5*b)*diff(exp(-0.5* b),csi_1);
H(3)=(-1)^(i)*exp(0.5*b)*diff(exp(-0.5* b),csi_2);
H(4)=(-1)^(i)*exp(0.5*b)*diff(exp(-0.5* b),csi_3);
and so on with other derivations to get the coefficients up.
Thank you very much. If it is off topic I'll open another question.
That is the message:
??? The following error occurred converting from sym to double:
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 ==> ProvaDiff at 76
H(2)=(-1)^(i)*exp(0.5*b)*diff(exp(-0.5* b),csi_1);
  2 件のコメント
Matt Fig
Matt Fig 2011 年 5 月 25 日
You didn't mention that you wanted to use this symbolically in your original post. This makes a world of difference! I don't have the symbolic toolbox, but with any luck Walter, someone else who has the symbolic toolbox will be along to help with this new issue.
mortain Antonio
mortain Antonio 2011 年 5 月 25 日
Sorry I haven't mentioned. I was used to Maple or Fortran where there is no difference

サインインしてコメントする。


Walter Roberson
Walter Roberson 2011 年 5 月 25 日
H(1) = 1;
creates H as an array of double. Two lines later you try to assign a symbolic result in to H(2) so the program tries to convert that symbolic result in to a double.
I suggest that above the H(1) assignment, you have
H = repmat(sym(0),1,4);
  1 件のコメント
mortain Antonio
mortain Antonio 2011 年 5 月 25 日
Your suggestion was really helpful since I've understood where was the problem. I solved it by putting H(1)=1 at the end!
Thanks again

サインインしてコメントする。

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by