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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
我的代码解常微分一直说要返回列向量,有大神帮忙看看嘛
  ^" j/ f% a) i" C) R1 b$ n: m1 [6 N. ?7 Y; X* I2 E6 g. X0 l
这是代码:0 `- p1 I( ?7 \9 j( y& m" Y
function s=mywork(t,y,eta1,eta2,G1,yieldstress,contactstrain,flow,arg)
: P! W7 [4 E6 ^6 M1 h- N$ @' ]# v, Bswitch flow
( ?! z$ J' `2 T# }7 }case 'creep & recovery'0 o$ z2 k+ l% X8 t/ y' w
        stress0=arg(1);
1 {) M" w& Q; U( v* F9 k' b6 N" g        risetime=arg(2);
+ k# ?) S  V- z/ p4 P  m        creeptime=arg(3);
0 T4 S) M' \; Z/ f5 ~8 c- _        if t<risetime) n6 ?  O& _. v( U# _
            stressrate=stress0/risetime;, C7 l0 O' H! y/ @  `* g& X+ i+ u
            stress=stressrate*t;& |+ w/ J: N4 v0 ^: U% w  v
        elseif t<creeptime. X. ^9 L3 |8 F
            stressrate=0;! ?# U. C$ j0 \8 J; U
            stress=stress0;7 G: Q& P' z' z1 o" w  V
        elseif t<creeptime+risetime
" Z6 K( P/ E' S, C. L" b3 p            stressrate=stress0/risetime;
: ~8 L1 H4 i7 m            stress=stress0-stressrate*(t-creeptime);
( T& n; U0 W" c% J; N- r# q' d        else
9 o  v$ }! M3 g7 p$ Q$ L% N, H            stressrate=0;" \0 r7 m9 |1 Z7 M" p8 V
            stress=0;
6 \6 y0 Q1 c" B; C        end) h( H& u: I' f# F: K
        gam1=y(1);
, J6 s4 t* l/ ~3 I- V! X- H        gam2=y(2);0 ]6 p* l' J( z+ ~
        s(1)=gam2;
+ \. d5 i3 o$ P3 P& J9 ^        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);, t' }, K+ J$ [1 m0 ]
6 [1 a1 Q8 b) M: p1 V$ o

; U5 R) v7 J/ {8 A3 I) b" {. @4 E4 f' z3 U
clear all
/ p: G: f4 P% ~5 i* jclc
/ O. n" t  ~7 L$ s0 w% Awarning off
' v0 f8 m* U( h/ ^  `# C8 @
& Z2 X' O" {1 o' X: U* Beta1=10;  % [Pa.s]
- P, g' w: D1 T: v0 h. _eta2=20;  % Pa.s]" X1 U! w. o  m7 f% \9 U
G1=2;   % [Pa]3 P) x" [3 b! [" W+ P
G2=5;   %[Pa]( i! ~9 f& ]# w* W: R
yieldstress=5;  % [Pa]
1 o% u  j4 |/ }contactstrain=5;
" o, ]3 I1 W% T. v7 W' p& u
1 d: ^& N/ `" U0 E8 c9 y2 ~$ m& z& _2 u
flow='creep & recovery';
/ r  X4 j  g- S$ f0 ~+ estress0=1:2:10;
: z0 C1 R3 h3 l/ xrisetime=0.01;
% M3 o$ F( ~: \0 M+ H4 ocreeptime=100;9 {  V$ Z8 `0 Y
for i=1:length(stress0)
" ~; B& F3 S% x+ n7 R9 X- b1 V    [t,strain]=ode15s(@mywork,[0 10],[0 0],[],eta1,eta2,G1,yieldstress,contactstrain,flow,[stress0(i) risetime creeptime]);  d% `1 \4 Y/ m  U- \* S' W
    subplot(2,3,3);     semilogx(t,strain(:,1));        hold on
7 y3 L$ i- H1 S( m" D    a{i}=strcatnum2str(stress0(i),'(Pa)');
) t- D- q1 e0 X5 o. Iend8 e1 `! m6 N5 W; _# t
xlin([1e-4 1000]);   
( n6 S; o/ I, ]9 n0 n; M! Zxlabel('Time(s)');      ylabel('Shear strain(-)');1 g1 a+ [; C2 ?. t# o3 _3 U# Y
legend(a)8 s" t" q$ b( z( C

  b. T6 b  J$ }: y' |0 E1 M. S9 v
/ p5 O6 X4 ]% W( }
错误使用 odearguments (第 93 行)  J5 [' t7 ~0 f2 B
MYWORK 必须返回列向量。
/ K  T* \$ b. _+ {$ L1 l7 U; O% T0 j; `; N, K
出错 ode15s (第 152 行). S& B! e+ [6 D5 Z6 `2 F% m
    odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options, varargin);# |8 a1 d+ i* v. I( D( O

0 o5 W6 j: T3 ?  X. N/ g; I出错 Untitled2 (第 20 行)
# E$ X! I* |, H  l5 T1 C- @1 }    [t,strain]=ode15s(@mywork,[0 10],[1 0],[],eta1,eta2,G1,yieldstress,contactstrain,flow,[stress0(i) risetime creeptime]);9 z2 p* n3 Z0 n0 t/ ]
7 s7 N* p  Z% c7 s- {0 I; v

( P2 ?3 `% M4 M: W感谢大神们!
2 @" ?$ v3 ^; O& N2 u

该用户从未签到

2#
发表于 2021-1-5 13:09 | 只看该作者
clear all
" x" [1 e' G8 I9 S$ u! L2 }, bclc
/ X/ L- a5 l2 U- x& |' fwarning off0 p. A! ^" V1 f! r4 h) c& V. n

/ W6 D& n5 [7 E- Teta1=10;  % [Pa.s], z8 F) F; Y$ n/ a: E7 Z& y( X" B$ {
eta2=20;  % Pa.s]
3 r8 a  r/ `1 P  w! zG1=2;   % [Pa]
* Q4 U/ @# N  B6 MG2=5;   %[Pa]
" E. ?* S! q* w+ p* h+ ryieldstress=5;  % [Pa]8 E% @  i8 b; ]- E4 [
contactstrain=5;
" R$ e; F9 j( d: R5 B- }! L# k" @. ?" w. F. p7 P/ Q. z+ S
. H, F$ O6 T' t4 O% u- w7 e
flow='creep & recovery';' A  R" p' f- a# _
stress0=1:2:10;/ \7 b. L% `; O8 f
risetime=0.01;
9 V: w9 w! O0 W- n0 p4 @creeptime=100;9 A9 Y7 d$ t+ c) \: Y: x% K0 o
for i=1:length(stress0)
9 \. x! V; g2 e9 ~9 k, H    [t,strain]=ode15s(@mywork,[0 10],[0 0],[],eta1,eta2,G1,yieldstress,contactstrain,flow,[stress0(i) risetime creeptime]);
1 e" F; J8 }/ l1 V# [+ M; l% c% q    subplot(2,3,3);     semilogx(t,strain(:,1));        hold on2 u8 \' ~) ]/ X( r- t7 J0 `! n& q9 a
    a{i}=strcat(num2str(stress0(i)),'(Pa)');
$ w6 D+ D* t% j  u# T: nend* `! j4 l3 X* |' K
xlim([1e-4 1000]);( A4 \) x# V% `
xlabel('Time(s)');      ylabel('Shear strain(-)');& o5 U, J% A7 f; d6 z0 u
legend(a)( a) T6 L$ C$ C7 g1 D9 H/ A5 d
function s=mywork(t,y,eta1,eta2,G1,yieldstress,contactstrain,flow,arg)
7 G: o* Y8 O  s% M  m, Kswitch flow  j, G; G+ l: L- l
    case 'creep & recovery'% G% ^% f0 G5 v
        stress0=arg(1);
  F% D6 H9 b# |- ^5 W2 d0 L        risetime=arg(2);
/ x+ b+ P1 z; r. ~/ ]        creeptime=arg(3);' ]& t' a0 [/ @
        if t<risetime
0 ~1 T) {/ d! ~& Z; d  I& m            stressrate=stress0/risetime;
" B' F  {% W+ ~; Q' i& x            stress=stressrate*t;
1 q8 G% R9 Y8 J        elseif t<creeptime
4 @3 ~& J& z: L4 M" w7 {            stressrate=0;
) w. h- |* P" B0 Z- t            stress=stress0;
# v# h) G( O/ w& p) l        elseif t<creeptime+risetime
; u0 L  Z' |- E* i  L            stressrate=stress0/risetime;! x% v9 ?* H2 C  v0 `& i' L2 @( k
            stress=stress0-stressrate*(t-creeptime);7 J" z" e+ a% p1 V, [' t
        else5 m* U, ]8 q: B3 R& X$ q" b* K. ~+ ?
            stressrate=0;
8 l* H: W4 I6 T0 j) Q            stress=0;
+ N6 O/ `0 y( x        end0 t3 J' d: I; P: x
        gam1=y(1);1 U/ [2 Z+ i; a
        gam2=y(2);6 V4 H7 n  @' z+ Q; O: |  U
        s(1)=gam2;
: ~7 i7 t+ @0 Q        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);7 w, o: N  E$ p. s4 C: \* p0 n
        s=s';
: Y6 G! t% ~) \5 s8 I* Gend
: q2 F% C9 V7 Y! m7 X* G1 e+ nend

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-21 11:28 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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