Help with a MuPAD error please
古いコメントを表示
Hi, I'm trying to run a program I put together, but I keep encountering a MuPAD error partway through. The program is exactly the same as a previous program I created, but with a few more substitutions than the last, and a few more bits of data entered too. Functionally it should be the same though, and that's why I'm confused? So, what's causing the MuPAD error? How do I debug this? I didn't understand the literature online, maybe someone with some experience might be able to help. I can also post the code if it's more useful.
Thanks
[Code merged from comment]
data = csvread('data.csv');
assert (mod(size(data, 1), 1) == 0, ...
'Input data must have an integer multiple of 1 rows');
assert (size(data, 2) == 8, ...
'Input data must have exactly eight columns.');
syms d1;
nsys = size(data, 1);
for k = 1 : nsys,
F = solve_d_two_layers_eq(data((k-1) + (1:1), 1:end));
d(k, :) = solve(F);
end
dd = double(d);
fid=fopen('d_values.csv','w');
fprintf(fid,'%+5.5f, %+5.5fi\n',[real(dd(:)), imag(dd(:))].');
fclose(fid);
and the function file:
function F = solve_d_two_layers_eq(p)
assert (ndims(p) ==2, ...
'System parameters ''p'' must be 2D matrix.');
assert (all(size(p) ==[1,8]), ...
'System parameters must be 1-by-8 matrix.');
syms d1
n0 = 1;
y = p(:,1);
R = p(:,2);
n1 = p(:,3);
k1 = p(:,4);
n2 = p(:,5);
k2 = p(:,6);
n3 = p(:,7);
k3 = p(:,8);
d2 = 300;
g1 = ((n0.^2 - n1.^2 - k1.^2)./((n1 + n2).^2 + k1.^2));
g2 = ((n1.^2 - n2.^2 + k1.^2 - k2.^2)./((n1 + n2).^2 + (k1 + k2).^2));
h1 = ((2.*n0.*k1)./((n0 + n1).^2 + k1.^2));
h2 = ((2.*(n1.*k2 - n2.*k1))./((n1 + n2).^2 + (k1 + k2).^2));
a1 = ((2.*pi().*k1.*d1)./y);
b1 = ((2.*pi().*n1.*d1)./y);
p2 = ((exp(a1)).*cos(b1));
q2 = ((exp(a1)).*sin(b1));
t2 = ((exp(-1.*a1)).*(g2.*(cos(b1)) + h2.*(sin(b1))));
u2 = ((exp(-1.*a1)).*(h2.*(cos(b1)) - g2.*(sin(b1))));
p12 = (p2 + g1.*t2 - h1.*u2);
q12 = (q2 + h1.*t2 + g1.*u2);
t12 = (t2 + g1.*p2 - h1.*q2);
u12 = (u2 + h1.*p2 + g1.*q2);
g3 = ((n2.^2 - n3.^2 + k2.^2 - k3.^2)./((n2 + n3).^2 + (k2 + k3).^2));
h3 = ((2.*(n2.*k3 - n3.*k2))./((n2 + n3).^2 + (k2 + k3).^2));
a2 = ((2.*pi().*k2.*d2)./y);
b2 = ((2.*pi().*n2.*d2)./y);
p3 = ((exp(a2)).*(cos(b2)));
q3 = ((exp(a2)).*(sin(b2)));
t3 = ((exp(-1.*a2)).*(g3.*(cos(b2)) + h3.*(sin(b2))));
u3 = ((exp(-1.*a2)).*(h3.*(cos(b2)) - g3.*(sin(b2))));
r2 = ((exp(a1)).*(g2.*(cos(b1)) - h2.*(sin(b1))));
s2 = ((exp(a1)).*(h2.*(cos(b1)) + g2.*(sin(b1))));
v2 = ((exp(-1.*a1)).*(cos(b1)));
w2 = ((-1.*(exp(-1.*a1))).*(sin(b1)));
r12 = (r2 + g1.*v2 - h1.*w2);
s12 = (s2 + h1.*v2 + g1.*w2);
v12 = (v2 + g1.*r2 - h1.*s2);
w12 = (w2 + h1.*r2 + g1.*s2);
p13 = (p12.*p3 - q12.*q3 + r12.*t3 - s12.*u3);
q13 = (q12.*p3 + p12.*q3 + s12.*t3 + r12.*u3);
t13 = (t12.*p3 - u12.*q3 + v12.*t3 - w12.*u3);
u13 = (u12.*p3 + t12.*q3 + w12.*t3 + v12.*u3);
F = (((t13.^2 + u13.^2)./(p13.^2 + q13.^2)) - R);
Error message:
>> run solve_d_two_layers
Warning: Explicit solution could not be found.
> In solve at 83
In solve_d_two_layers at 58
In run at 74
??? Error using ==> mupadmex
Error in MuPAD command: Subscripted assignment dimension
mismatch
Error in ==> sym.sym>sym.subsasgn at 1435
C = mupadmex('symobj::subsasgn',A.s,B.s,inds{:});
Error in ==> solve_d_two_layers at 58
d(k, :) = solve(F);
Error in ==> run at 74
evalin('caller',[script ';']);
3 件のコメント
Walter Roberson
2012 年 4 月 7 日
Yes, the code would be useful, together with the error message.
Walter Roberson
2012 年 4 月 9 日
Thanks for posting the code. Please also post the error message and location.
Also, please edit the code (I moved it above) and insert the "function" line for your "function file".
Alex
2012 年 4 月 9 日
採用された回答
その他の回答 (0 件)
カテゴリ
ヘルプ センター および File Exchange で Get Started with MuPAD についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!