Unable to find value of T1

1 Ansicht (letzte 30 Tage)
MINATI PATRA
MINATI PATRA am 29 Sep. 2019
Kommentiert: Walter Roberson am 10 Okt. 2019
syms L m x xx s theta_b h Z y U T0 T1 T2 k0 b Tinf Tb sumsol
k=6;
sym('u0(x)');('u1(x)');('u2(x)');('u3(x)');('u4(x)');('u5(x)');('u6(x)');('u7(x)');('u8(x)');('u9(x)');('u10(x)');
('u11(x)');('u12(x)');('u13(x)');('u14(x)');('u15(x)');('u16(x)');('u17(x)');('u18(x)');('u19(x)');('u20(x)');
s='u0(x)'+h*'u1(x)'+h^2*'u2(x)'+h^3*'u3(x)'+h^4*'u4(x)'+h^5*'u5(x)'+h^6*'u6(x)'+h^7*'u7(x)'+h^8*'u8(x)'+h^9*'u9(x)'...
+h^10*'u10(x)'+h^11*'u11(x)'+h^12*'u12(x)'+h^13*'u13(x)'+h^14*'u14(x)'+h^15*'u15(x)'+h^16*'u16(x)'+h^17*'u17(x)'...
+h^18*'u18(x)'+h^19*'u19(x)'+h^20*'u20(x)';
Ak=(1/factorial(k))*subs(diff(1/s*(diff(s,x))^2,h,k),h,0);Bk=(1/factorial(k))*subs(diff(s^(1-Z),h,k),h,0);Ck=(1/factorial(k))*subs(diff(s^(-Z),h,k),h,0);
Linverse = int(1/xx*int(y*x,x,0,xx),xx,L,x);
L=0.05;Tinf=273+25;Tb=273+150;h=4;beta=-1.3;Z=-1.3;k0=148*300^-beta;b=0.005;
T1=-beta*Linverse(subs(Ak(0),sym('u0(x)'),T0))+2*h*L/k0/b*Linverse(subs(Bk(0)/x,sym('u0(x)'),T0)) -2*h*L*Tinf/k0/b*Linverse(subs(Ck(0)/x,sym('u0(x)'),T0))
  5 Kommentare
MINATI PATRA
MINATI PATRA am 30 Sep. 2019
Dear Walter
This code worked previously in a research paper.
Walter Roberson
Walter Roberson am 30 Sep. 2019
I guarantee that the code you posted never worked.
Ak=(1/factorial(k))*subs(diff(1/s*(diff(s,x))^2,h,k),h,0);Bk=(1/factorial(k))*subs(diff(s^(1-Z),h,k),h,0);Ck=(1/factorial(k))*subs(diff(s^(-Z),h,k),h,0);
That is a symbolic expression.
Ak(0)
That attempts to index the symbolic expression at location 0. 0 is not a valid subscript for symbolic expressions.
Ak(0) and Bk(0) and Ck(0) only make sense if Ak, Bk, and Ck are either functions or symbolic functions. Converting them to symbolic functions of one variable is not difficult, but which variable?
Likewise, Linverse(symbolic expression) only makes sense if Linverse is a function or symbolic function. You can convert to symbolic function, but function of what variable?
sym('u0(x)');('u1(x)');('u2(x)');('u3(x)');('u4(x)');('u5(x)');('u6(x)');('u7(x)');('u8(x)');('u9(x)');('u10(x)');
That creates the symbolic expression u0(x) in sufficiently old versions of MATLAB (in more recent versions it is an error.) It then throws away that symbolic expression. Then it creates the character vector 'u1(x)' and throws away the character vector. The sym() call does not enclose the 'u1(x)'
syms u0(x) u1(x) u2(x) u3(x) u4(x) u5(x) u6(x) u7(x) u8(x) u9(x) u10(x) u11(x) u12(x) u13(x) u14(x) u15(x) u16(x) u17(x) u18(x) u19(x) u20(x)
would be meaningful MATLAB.
s='u0(x)'+h*'u1(x)'+h^2*'u2(x)'+h^3*'u3(x)'+h^4*'u4(x)'+h^5*'u5(x)'+h^6*'u6(x)'+h^7*'u7(x)'+h^8*'u8(x)'+h^9*'u9(x)'...
That works more accidentally in older versions. 'u0(x)' is functioning as a character vector there, not as a symbolic expression. If you had 'u0(x)' + 'h*u1(x)' then that would fail due to trying to add character vectors of different lengths.
s = u0(x)+h*u1(x)+h^2*u2(x)+h^3*u3(x)+h^4*u4(x)+h^5*u5(x)+h^6*u6(x)+h^7*u7(x)+h^8*u8(x)+h^9*u9(x)...

Melden Sie sich an, um zu kommentieren.

Antworten (1)

Walter Roberson
Walter Roberson am 30 Sep. 2019
The below can at least execute without error. It is not clear that it is using the proper variable as the parameters for Ak, Bk, Ck.
syms L m x xx s theta_b h Z y U T0 T1 T2 k0 b Tinf Tb sumsol
k=6;
syms u0(x) u1(x) u2(x) u3(x) u4(x) u5(x) u6(x) u7(x) u8(x) u9(x) u10(x) u11(x) u12(x) u13(x) u14(x) u15(x) u16(x) u17(x) u18(x) u19(x) u20(x)
s = u0(x)+h*u1(x)+h^2*u2(x)+h^3*u3(x)+h^4*u4(x)+h^5*u5(x)+h^6*u6(x)+h^7*u7(x)+h^8*u8(x)+h^9*u9(x)...
+h^10*u10(x)+h^11*u11(x)+h^12*u12(x)+h^13*u13(x)+h^14*u14(x)+h^15*u15(x)+h^16*u16(x)+h^17*u17(x)...
+h^18*u18(x)+h^19*u19(x)+h^20*u20(x);
Ak(x)=(1/factorial(k))*subs(diff(1/s*(diff(s,x))^2,h,k),h,0);
Bk(x)=(1/factorial(k))*subs(diff(s^(1-Z),h,k),h,0);
Ck(x)=(1/factorial(k))*subs(diff(s^(-Z),h,k),h,0);
Linverse(x) = int(1/xx*int(y*x,x,0,xx),xx,L,x);
L=0.05;
Tinf=273+25;
Tb=273+150;
h=4;
beta=-1.3;
Z=-1.3;
k0=148*300^-beta;
b=0.005;
T1_raw = -beta*Linverse(subs(Ak(0),u0(x),T0))+2*h*L/k0/b*Linverse(subs(Bk(0)/x,u0(x),T0)) -2*h*L*Tinf/k0/b*Linverse(subs(Ck(0)/x,u0(x),T0));
T1 = simplify(subs(T1_raw));
disp(T1)
  2 Kommentare
MINATI
MINATI am 10 Okt. 2019
Sorry Walter
Actually my laptop was out of order, so came late in the forum. But the "accepted answer" option is not in this page. HoW to accept?
Walter Roberson
Walter Roberson am 10 Okt. 2019
It appears you used a different login name before, so it does not know you are the same person who asked the Question. I cannot Accept it myself, as I cannot Accept my own answers .

Melden Sie sich an, um zu kommentieren.

Community Treasure Hunt

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

Start Hunting!

Translated by