error using symengine is generated while getting the derivative of equation of 8 degree with variable constants
2 次查看(过去 30 天)
显示 更早的评论
I am trying to get the slope of equation (y3c=p1*xs^8 + p2*xs^7 + p3*xs^6 + p4*xs^5 + p5*xs^4 + p6*xs^3 + p7*xs^2 + p8*xs + p9),
where,xs=(x3s-mean)./dev; and xs x3s are symbols.
The problem is that the constant p1 to p9 ,mean and dev are arrays.
how should i modify the code to work without the following error
Error using symengine
Matrix must be square.
Error in sym/privBinaryOp (line 1034)
Csym = mupadmex(op,args{1}.s, args{2}.s, varargin{:});
Error in ^ (line 339)
B = privBinaryOp(A, p, 'symobj::mpower');
Error in trailing_edge_2 (line 79)
y3c=p1*xs^8 + p2*xs^7 + p3*xs^6 + p4*xs^5 + p5*xs^4 + p6*xs^3 + p7*xs^2 + p8*xs + p9;
clc
clear
Excel= xlsread('cf.xlsx','cf') ;
x=Excel(:,1);%x
y=Excel(:,2);%y
%%%%%%%%%%%%trailing edge(551:614,1:36))%%%%%%%%%%%
x3=[x(551:614);x(1:36)];
y3=[y(551:614);y(1:36)];
x3=x3';
y3=y3';
for i=1:length(x3)
if i<=33
mean(i)=-0.0005415;dev(i)=0.0007397;
p1(i) = -8.172e-05;p2(i) = -0.0004409 ; p3(i) = -0.0006484;
p4(i) = 0.000167;p5(i) = 0.0008287; p6(i) = 1.85e-05;
p7(i) = -0.0006773;p8(i) = -0.001281; p9(i) = 0.004286;
elseif (i>=34) && (i<=39)
mean(i)=7.32e-05;dev(i)=0.0001512;
p1(i) = 5.645e-05 ;p2(i) = 0.000194 ;p3(i) = 7.821e-05 ;
p4(i) = -0.0002781 ;p5(i) = -0.000149 ;p6(i) = 0.0002006 ;
p7(i) = 0.0002051 ;p8(i)= 0.0005569 ;p9(i) = 0.0002695 ;
else
mean(i)=-0.002376; dev(i)=0.002098;
p1(i) = 1.409e-05 ;p2(i) = 8.773e-05 ;p3(i) = 0.0001679 ;
p4(i) = 5.782e-05 ;p5(i) = -8.276e-05 ;p6(i) = 0.000105 ;
p7(i) = 0.0006627 ;p8(i) = 0.001226 ;p9(i) = -0.002926 ;
end
x3p(i)=(x3(i)-mean(i))/dev(i);
y3p(i)=p1(i)*x3p(i)^8 + p2(i)*x3p(i)^7 + p3(i)*x3p(i)^6 + p4(i)*x3p(i)^5 + p5(i)*x3p(i)^4 + p6(i)*x3p(i)^3 + p7(i)*x3p(i)^2 + p8(i)*x3p(i) + p9(i);%curve plotted using equ.
end
diff22=max(y3-y3p);
syms xs x3s
xs=(x3s-mean)./dev;
y3c=p1*xs^8 + p2*xs^7 + p3*xs^6 + p4*xs^5 + p5*xs^4 + p6*xs^3 + p7*xs^2 + p8*xs + p9;
dys=diff(y3c);
slope=double(vpa(subs(dys,x3s,x3)));
theta=atand(slope); %%% slope array
1 个评论
Dyuman Joshi
2023-12-27
编辑:Dyuman Joshi
2023-12-27
Do not use built-in functions as names for variables (or scripts for that matter). Rename the variable to meanX or meanArray or something else.
If the constants are arrays, loop through the values.
I don't understand why you have defined xs as a symbolic variable, just to overwrite it in the next line.
Not to mention, it's not clear what you are substituting in place x3s, nor why you are substituting when dys does not depend of x3s.
Also, consider preallocating arrays and storing values/data in arrays instead of dynamically naming variables - TUTORIAL: Why Variables Should Not Be Named Dynamically (eval)
回答(1 个)
Raghav Bansal
2023-12-27
编辑:Raghav Bansal
2023-12-27
Hi Zein,
As per my understanding you facing error "Matrix must be square" error while executing the code.
The error you are encountering is due to attempting to perform symbolic operations on arrays with non-scalar operations, which is not supported in MATLAB. To resolve this issue, you need to modify the code to handle each element of the arrays individually within the symbolic expressions.
Use element-wise power '.^' instead of matrix power '^' when working with arrays. This will apply the power operation to each element of the array individually rather than trying to perform matrix operations.
Hope it helps!
Regards,
Raghav
3 个评论
Raghav Bansal
2023-12-27
Hi Dyuman,
I understand your point, but the error "Matrix must be square" arises when we try to apply scalar operations on a non-square matrix or arrays in this case. For example:
x = [1, 2];
x = x ^ 2
will result in error while:
x = [1, 2; 1, 2];
x = x ^ 2
x = [1, 2];
x = x .^ 2
will execute without any error.
Thanks!
Raghav
Dyuman Joshi
2023-12-27
编辑:Dyuman Joshi
2023-12-27
I am aware of that. But the error OP got is not related to that, the error is related to an operation performed symbolically.
However, since I am not sure what OP has written in their code, I retracted my comment about that, but my point still stands.
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!