找回密码
 注册
关于网站域名变更的通知
查看: 538|回复: 3
打印 上一主题 下一主题

matlab解常微分一直报错返回列向量

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-1-5 10:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
我的代码解常微分一直说要返回列向量,有大神帮忙看看嘛
: p' E: l% @; X3 J7 ^8 U) W3 J2 `$ }! o/ I, K
这是代码:' V) G5 R! H- u3 N" ^
function s=mywork(t,y,eta1,eta2,G1,yieldstress,contactstrain,flow,arg)
$ c, W' Z; L7 L$ wswitch flow
6 @1 |  U& ~& j. s4 x6 _case 'creep & recovery'
' M* O' y8 @1 `& X/ g3 k; {        stress0=arg(1);
9 g- d6 i" d+ f1 ]; ^( z6 Q        risetime=arg(2);7 g) x3 n3 O: H8 I8 V; Z4 _, m3 d) d
        creeptime=arg(3);
) D7 J5 y: a; f$ k. P! O* F        if t<risetime: }$ T) C/ W" W% T9 i: g4 i; E
            stressrate=stress0/risetime;
9 x. H. u1 f: j            stress=stressrate*t;9 O3 p5 d% j1 T9 Y* f
        elseif t<creeptime& g9 _0 B5 C5 @7 V7 a* G- d+ Y7 y
            stressrate=0;
5 B/ p2 e2 E+ s0 f6 b& D+ w            stress=stress0;; l2 H% U( M5 ~7 W
        elseif t<creeptime+risetime
6 V/ r. \$ Y3 ~; p8 C) w3 f: {            stressrate=stress0/risetime;' |0 x+ ]1 v. c% |
            stress=stress0-stressrate*(t-creeptime);
$ ]8 g# Q8 z# I# o- s        else. a$ Y7 c3 S( h5 r
            stressrate=0;' l2 O; p* K; M; S% n. Y% `
            stress=0;' j% R9 |% B6 T. l2 f
        end% t! s) a& T+ L+ A
        gam1=y(1);+ r" I) H* I; s8 O+ c0 P) G
        gam2=y(2);
. u* _" Y! b! E3 E1 u5 Y        s(1)=gam2;! [( ]: k9 @1 @
        s(2)=G1/(eta1*eta2*((abs(gam1)-contactstrain)>0))*((stress-eta2*gam2*((abs(gam1)-contactstrain)>0)-sign(stress-eta2*gam2*((abs(gam1)-contactstrain)>0))*yieldstress)*((abs(stress-eta2*gam2*((abs(gam1)-contactstrain)>0))-yieldstress)>0)-eta1*gam2+eta1/G1*stressrate);
- i! p0 _9 a; T, w7 e" g- F1 R. [) d) P$ U- B, |( ^; i

, e; m- |! z  x
* \; S5 M" A1 z* e/ `clear all
: [  P' k2 s) o: o# Gclc
+ j3 w" ]! D/ s' W9 g$ L1 [- z5 Q# kwarning off
2 n, L* w) n. ?$ B8 @/ O( o
, p; \: s1 y- C4 ~* h  x0 J* c* y' r4 Ueta1=10;  % [Pa.s]* |( V7 {6 F* d. c: B
eta2=20;  % Pa.s]
$ U9 G* f7 {, p0 W" l5 g/ E2 B6 uG1=2;   % [Pa]: G" u8 v+ I8 f+ p' T
G2=5;   %[Pa]
* o4 ]& p# s4 ^; e0 byieldstress=5;  % [Pa]4 ?+ j" o6 w5 {1 B! q" w/ g8 m
contactstrain=5;
5 f3 P8 d9 G$ \2 l! p+ g& s0 q( o& n1 T: Y! w
* ^5 o7 W* K& v/ M3 O
flow='creep & recovery';
, ]% h% i) C  Kstress0=1:2:10;" {4 N  E: ~7 r8 s7 x* W
risetime=0.01;
' G8 U  @/ q  h# J2 X$ B- @+ Ucreeptime=100;" k% C) X3 f9 o" V# a& ^. T$ l
for i=1:length(stress0)0 X3 x" p+ `; b7 L8 _* `
    [t,strain]=ode15s(@mywork,[0 10],[0 0],[],eta1,eta2,G1,yieldstress,contactstrain,flow,[stress0(i) risetime creeptime]);$ v  i) z9 L8 b& H
    subplot(2,3,3);     semilogx(t,strain(:,1));        hold on8 Y' m5 c9 y1 e
    a{i}=strcatnum2str(stress0(i),'(Pa)');
" @/ S; s7 V, e& Cend* h* _' ^7 f, [8 E( p8 A
xlin([1e-4 1000]);   
- W3 ?# q6 H1 F; b- zxlabel('Time(s)');      ylabel('Shear strain(-)');9 y7 M- e' p: m9 A! j5 Z: y0 ~; a: o
legend(a)
* ^; T$ j# ?. c7 O6 K* Y' {! V) y3 m% V! @
* ?% g) N# A1 Z4 y8 ]  S7 W

# N# i! u" j1 a9 X) ]3 `* {& p错误使用 odearguments (第 93 行)5 N2 l+ c3 h. F' \( w; f
MYWORK 必须返回列向量。& k- L9 Z' c4 Z  Q3 d8 j- P- M

/ h, a/ T6 u5 I$ m- Q出错 ode15s (第 152 行)
# L' Y; |/ ]5 x' T    odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options, varargin);
: J: {) R& x8 J' `( D) j& Z1 L% m4 I2 M/ A0 L4 ^( x$ H, @3 f
出错 Untitled2 (第 20 行)+ l- k, D5 F& A2 B0 q+ b& b
    [t,strain]=ode15s(@mywork,[0 10],[1 0],[],eta1,eta2,G1,yieldstress,contactstrain,flow,[stress0(i) risetime creeptime]);
9 {% i4 t- m/ p2 M
* l$ y" M( Z. L, Q, e+ G! k
3 `0 A# J7 {2 f, |感谢大神们!  E# P# J  t" _. E- D/ x' w

该用户从未签到

2#
发表于 2021-1-5 13:09 | 只看该作者
clear all# a: C; w( b2 E# }4 G
clc! J+ A, \/ b& M( n/ T8 n  S
warning off
$ a# R& ?# O5 D& i
# k' f0 g" o5 [! {2 I& ?( ueta1=10;  % [Pa.s]4 L- @" t0 z# c* m) _' F
eta2=20;  % Pa.s]
" f+ S& H$ F1 R% J4 k6 @6 `* ~$ ?' {0 U, uG1=2;   % [Pa]3 W) ~( u5 [7 C; w, ~
G2=5;   %[Pa]
9 Y+ \; y& `6 X5 ^$ jyieldstress=5;  % [Pa]
6 v/ {) y! n: }4 Gcontactstrain=5;* E0 k+ ]: x+ J+ I5 e/ G2 q: N

/ z6 y" [* _- O5 f% E0 W2 }& Y% @2 E) O9 S1 \! }* L
flow='creep & recovery';
, S4 T2 H: E+ X  S  rstress0=1:2:10;) b; D2 a; Q. `" Y8 c
risetime=0.01;
8 s* x1 |, I2 m& |( ]0 |  _& hcreeptime=100;$ t/ k% e) v. }- A
for i=1:length(stress0)
  u1 I8 e, `) ?, g/ H    [t,strain]=ode15s(@mywork,[0 10],[0 0],[],eta1,eta2,G1,yieldstress,contactstrain,flow,[stress0(i) risetime creeptime]);
1 x9 \# R1 m7 _8 k" l' ~( J    subplot(2,3,3);     semilogx(t,strain(:,1));        hold on
/ U. u' C# j* V0 W$ |, O& J0 ^    a{i}=strcat(num2str(stress0(i)),'(Pa)');# Y7 W; K$ a2 T+ [/ X0 \
end
6 @3 f5 s- x9 J3 Z" M$ Kxlim([1e-4 1000]);5 q$ I8 V. w& a3 s
xlabel('Time(s)');      ylabel('Shear strain(-)');
5 x) D! G/ M0 {1 G! Z& g( Vlegend(a)
, \1 D& z: C- bfunction s=mywork(t,y,eta1,eta2,G1,yieldstress,contactstrain,flow,arg)
5 z& T! W/ w/ c: J3 s2 B2 T! bswitch flow
1 R+ }1 W6 @7 _7 U    case 'creep & recovery'0 @- [6 v/ @7 g4 F7 w, Z6 i# I
        stress0=arg(1);
  @! O  d2 I4 H: F        risetime=arg(2);3 M, l. ~2 \& L2 S
        creeptime=arg(3);
/ s1 r4 X7 y2 [        if t<risetime6 K& g* R7 I/ q7 E2 y5 W4 c$ K
            stressrate=stress0/risetime;9 ]/ Y, F5 `! s' K
            stress=stressrate*t;
  @, a9 G+ P9 O6 b6 ]/ L        elseif t<creeptime8 x# z# \2 @+ {1 _# B# q
            stressrate=0;) U! N2 {1 ?& s) I6 G7 I
            stress=stress0;
& m7 r; B+ i: z9 b0 L        elseif t<creeptime+risetime
# X; h5 Y7 A( Q- G; E            stressrate=stress0/risetime;
) G) E3 _5 S; e! A& B" |. a7 L            stress=stress0-stressrate*(t-creeptime);  {9 m$ }5 E& A4 j# e% j
        else
" k4 X* v# Z  s9 I  O            stressrate=0;
  b6 ]# H4 W% ]" a, u            stress=0;
' S6 Z( k* c4 D        end
1 V; d2 b4 R2 V8 _) n! ]$ ]        gam1=y(1);
' j/ o8 w5 k' g        gam2=y(2);) ^0 c/ v7 y+ X1 O+ l. H
        s(1)=gam2;& g' c, m$ v1 z3 M
        s(2)=G1/(eta1*eta2*((abs(gam1)-contactstrain)>0))*((stress-eta2*gam2*((abs(gam1)-contactstrain)>0)-sign(stress-eta2*gam2*((abs(gam1)-contactstrain)>0))*yieldstress)*((abs(stress-eta2*gam2*((abs(gam1)-contactstrain)>0))-yieldstress)>0)-eta1*gam2+eta1/G1*stressrate);
; i( t" i/ I( u% W4 s3 F. {/ i( j& t        s=s';
2 Y' ], ^9 ?" w' Bend
8 X# t1 H' E  C0 vend

该用户从未签到

4#
发表于 2021-1-5 15:43 | 只看该作者
来学习一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-1 18:25 , Processed in 0.156250 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表