a+b*sqrt(c)取整取模

本文探讨了如何通过矩阵乘法来递推求解特定序列,并利用群论知识找到循环节,从而解决大指数问题。文中还讨论了几种不同的取模策略及其优劣。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

反正我就自己记一记,

首先构造An+sqrt(c)*Bn和An-sqrt(c)*Bn,

然后随便证明一下得到要求的向下取整的值为2*An-1,这里是针对这个题,不同情况可以参考这样随机应变一下,大概

An和Bn可以通过矩阵乘法递推得到

因为指数太大必须找循环节,这里模一个最大4W多的质数,据说这个数据范围可以直接暴力一个一个算判断指数到多少会变成单位矩阵,这个就是循环节了

再据说就是,根据群论的知识这里可以保证mod*(mod-1)*(mod^2-1)是一个循环节,数据范围也保证了这个是在LL范围内的,于是指数就可以直接模这个了,这样还要再注意一下LL*LL%LL的溢出

但是其实这里用(mod-1)*(mod+1)也是可以过的,这样还不用处理溢出,快多了

反正就是总结一下几个可以模的东西,记所模质数为P

  1. P-1
  2. (P-1)*(P+1)
  3. P*(P-1)*(P+1)
  4. P*(P-1)*(P+1)*(P-1)
有什么问题一个一个试就好了,最下面那个有办法处理的话当然直接用是最保险了。


``` %% 智能悬臂梁双压电驱动振动控制仿真 % 作者:智能控制助手 % 参数来源:Zhang和Li论文(2020) Table 1 % 控制方法:基于解耦的PID控制 clc; clear; close all; %% 1. 系统参数初始化 % 悬臂梁参数 L = 0.477; % 梁长度(m) width = 0.0305; % 梁宽度(m) thickness = 0.7e-3; % 梁厚度(m) E = 71e9; % 杨氏(Pa) rho = 2770; % 密度(kg/m^3) I = width*thickness^3/12; % 截面惯性矩(m^4) % 压电片参数(B:根部,C:中部) % 压电片B参数 L_p1 = 0.024; % 压电片长度(m) pos_p1 = [0.024, 0.052]; % 安装位置(距固定端) % 压电片C参数 L_p2 = 0.024; pos_p2 = [0.212, 0.24]; % 压电材料参数 d31 = -1.7e-10; % 压电常数(C/N) Ep = 15.857e9; % 压电片杨氏(Pa) tp = 0.3e-3; % 压电片厚度(m) % 态参数(前两阶) beta = [1.875/L, 4.694/L]; % 态波数 omega = beta.^2*sqrt(E*I/(rho*width*thickness)); % 固有频率(rad/s) zeta = [0.01; 0.01]; % 阻尼比 % 传感器位置 x0 = 0.146; % 位移测量位置(距固定端) %% 2. 动力学建态叠加法) % 状态空间方程:M*q'' + C*q' + K*q = F*u n_modes = 2; % 考虑前两阶态 % 质量矩阵 M = diag([1, 1]); % 阻尼矩阵 C = diag(2*zeta.*omega); % 刚度矩阵 K = diag(omega.^2); % 输入矩阵B(压电驱动力) phi_prime = @(x) beta.*(cosh(beta*x) + cos(beta*x) - ... (sinh(beta*L)-sin(beta*L))/(cosh(beta*L)+cos(beta*L)).*(sinh(beta*x)+sin(beta*x))); B = zeros(n_modes,2); for i = 1:2 B(1,i) = (Ep*d31*width*tp/(2*tp)) * (phi_prime(pos_p1(2)) - phi_prime(pos_p1(1))); B(2,i) = (Ep*d31*width*tp/(2*tp)) * (phi_prime(pos_p2(2)) - phi_prime(pos_p2(1))); end % 状态空间方程 A_sys = [zeros(n_modes) eye(n_modes); -K -C]; B_sys = [zeros(n_modes,2); B]; C_sys = [phi_prime(x0), 0, 0, 0]; % 位移输出 sys = ss(A_sys, B_sys, C_sys, 0); %% 3. 解耦控制设计 % 解耦矩阵D = inv(G(0)) G0 = B; % 稳态增益矩阵 D = inv(G0); % 解耦矩阵 % PID参数初始化 Kp = [50, 0; 0, 50]; % 比例增益 Ki = [30, 0; 0, 30]; % 积分增益 Kd = [5, 0; 0, 5]; % 微分增益 % 创建PID控制器对象 pid1 = pid(Kp(1,1), Ki(1,1), Kd(1,1)); pid2 = pid(Kp(2,2), Ki(2,2), Kd(2,2)); %% 4. 仿真参数设置 dt = 0.001; % 时间步长 t = 0:dt:5; % 仿真时间 N = length(t); % 初始条件(自由端施加5mm初始位移) q0 = [0.005; 0.005; 0; 0]; % 预分配存储 y = zeros(N,1); u = zeros(N,2); error = zeros(N,2); %% 5. 主仿真循环 for k = 1:N-1 % 1. 系统响应 [y(k), ~, x] = lsim(sys, u(1:k,:), t(1:k), q0); % 2. 计算误差(目标位移为0) current_error = [0 - y(k); 0 - y(k)]; % 3. 解耦误差 decoupled_error = D * current_error; % 4. PID控制(带饱和限制) u(k+1,1) = pid1(decoupled_error(1), dt); u(k+1,2) = pid2(decoupled_error(2), dt); % 电压限幅±150V u(k+1,:) = max(min(u(k+1,:), 150), -150); % 保存误差 error(k+1,:) = current_error'; end %% 6. 结果可视化 figure('Color','white','Position',[100 100 1200 500]) % 位移对比 subplot(1,2,1) plot(t, y*1e3, 'LineWidth',1.5) title('自由端位移响应') xlabel('时间 (s)') ylabel('位移 (mm)') grid on legend('控制后位移') % 控制电压 subplot(1,2,2) plot(t, u(:,1), 'b', t, u(:,2), 'r', 'LineWidth',1.5) title('控制电压') xlabel('时间 (s)') ylabel('电压 (V)') ylim([-160 160]) grid on legend('压电片B','压电片C') %% 辅助函数:PID控制器实现 function u = pid(Kp, Ki, Kd, error, dt) persistent integral prev_error if isempty(integral) integral = 0; prev_error = 0; end integral = integral + error*dt; derivative = (error - prev_error)/dt; u = Kp*error + Ki*integral + Kd*derivative; prev_error = error; end```这代码里面有很多错误帮我找出来并且修正好错误
03-22
% meshfree_vibration_analysis.m % Free vibration analysis of laminated closed conical/cylindrical shells and annular plates % using TRPIM meshfree strong-form method (FSDT) in MATLAB % pinv clear; clc; close all; %% 1. Parameters % Geometry R1 = 1.0; % base radius L = 4.0; % axial length h = 0.1; % thickness phiSpan = 3/2*pi; % circumferential span (full shell) % Material (orthotropic laminate) E1 = 150e9; E2 = 10e9; mu12 = 0.25; rho = 1500; G12 = 5e9; G13 = 5e9; G23 = 6e9; ks = 5/6; layup = [0,90,0]; % fiber angles [deg] Nk = numel(layup); % Discretization nx = 16; ntheta = 16; % nodes in x and theta directions dist_func = @(a,b,n) 0.5*( (b-a)*(1 - cos(pi*(0:n-1)/(n-1))) ) + a; % 'gauss_lobatto' % dist_func = @(a,b,n) (0:n-1).^2 / (n-1)^2 * (b - a) + a; % 平方渐变示例 X=linspace(0,L,nx); T=linspace(0,phiSpan,ntheta); % T=linspace(0,phiSpan,ntheta+1); T(end)=[]; [xg, tg] = meshgrid(X,T); yg = R1 * cos(tg); zg = R1 * sin(tg); nnodes = [xg(:), yg(:), zg(:), tg(:)]; nodes = [xg(:), tg(:)]; N = size(nodes,1); % TRIPM settings rbf_type = 'MQ'; % 'MQ','EXP','TPS' dc = 2*(L/(nx-1)+phiSpan/(ntheta-1))/2; % characteristic length q = 1.03; % MQ exponent\meta = 2; % TPS exponent mp=0; mq=0; m = mp*mq; % Tchebychev polynomial total order bc_type='C'; % Support domain: K-nearest neighbors ns = 25; % support size idxNN = knnsearch(nnodes(:,1:3),nnodes(:,1:3),'K',ns); % in=nnodes(idxNN(1,:),:); % f1=draw_shell(in); f=draw_shell(nnodes); hold on surf(xg,yg,zg, 'FaceAlpha',0.3, 'EdgeColor','none'); % 标记目标点(红色) target_idx = 1; scatter3(nnodes(target_idx,1), nnodes(target_idx,2), nnodes(target_idx,3), ... 100, [0 0 0], 'filled', 'MarkerFaceAlpha',0.8) % 绘制欧氏距离邻居(蓝色线段) for i = 1:ns scatter3(nnodes(idxNN(target_idx,i),1), nnodes(idxNN(target_idx,i),2), nnodes(idxNN(target_idx,i),3), ... 100, [1 0.3 0.3], 'filled', 'MarkerFaceAlpha',0.8) plot3([nnodes(target_idx,1) nnodes(idxNN(target_idx,i),1)], ... [nnodes(target_idx,2) nnodes(idxNN(target_idx,i),2)], ... [nnodes(target_idx,3) nnodes(idxNN(target_idx,i),3)], ... 'b-', 'LineWidth',0.8, 'Color',[1 0.6 0]) end %% 2. Precompute basis matrices (G matrix inverse) for each node Ginv = cell(N,1); supp = cell(N,1); for i = 1:N Xi = nodes(i,1); Ti = nodes(i,2); nbr = idxNN(i,:); supp{i} = nbr; % build R0 and Tm at support nodes Xs = nodes(nbr,1); Ts = nodes(nbr,2); % compute pairwise radial basis R0 = zeros(ns); for a=1:ns for b=1:ns % Tab(a,b)=Ts(a)-Ts(b); % Tan1=wrapToPi(Tab); % rab = sqrt((Xs(a)-Xs(b))^2 - R1^2*(2*cos(Ts(a) - Ts(b))-2)); rab = sqrt((Xs(a)-Xs(b))^2 + (R1*wrapToPi(Ts(a)-Ts(b)))^2); R0(a,b) = radialRB(rab, rbf_type, dc, q); end end % Tchebychev basis at support nodes xp = 2*(Xs - 0)/L - 1; tp = 2*(Ts - 0)/phiSpan - 1; Tm = tchebyBasis(xp,tp,mp,mq); % assemble G G = [R0, Tm; Tm', zeros(size(Tm,2))]; % fprintf('cond(G) = %g\n', cond(G)); % %给 G 矩阵加正则化,加一点微小阻尼 % epsReg = 1e-8 * max(abs(diag(G))); % G = G + eye(size(G)) * epsReg; Ginv{i} = inv(G); % [U,S,V] = svd(G); % s = diag(S); % tol = max(size(G)) * eps(max(s)); % s_inv = s; % s_inv(s > tol) = 1./s(s > tol); % Ginv{i} = V * diag(s_inv) * U'; end %% 3. Collocation: assemble global K and M ndof = 5; totalDOF = ndof*N; K = sparse(totalDOF,totalDOF); M = sparse(totalDOF,totalDOF); % material stiffness matrices A,B,D and transverse shear [A,B,D_mat,As,I] = laminateABD(layup,E1,E2,mu12,G12,G13,G23,h,rho,ks); Dstruct = [A,B,zeros(3,2);B,D_mat,zeros(3,2);zeros(2,6),As]; Phi=cell(N,1); for i = 1:N % evaluation at node i Xi = nodes(i,1); Ti = nodes(i,2); nbr = supp{i}; nn = numel(nbr); % compute shape function and derivatives at eval point Phi{i} = computeShape(nodes(nbr,:), [Xi,Ti], Ginv{i}, rbf_type, dc, q, mp,mq, L, phiSpan, R1); % local stiffness and mass kernels [Ki_cell, Mi_cell] = localKM(Phi{i}, A, B, D_mat, As, R1, I(1), I(2), I(3)); % assemble rows = (i-1)*ndof + (1:ndof); for k = 1:nn col = (nbr(k)-1)*ndof + (1:ndof); K(rows,col) = K(rows,col) + Ki_cell(:,:,k); M(rows,col) = M(rows,col) + Mi_cell(:,:,k); end end figure; subplot(1,2,1); spy(K); subplot(1,2,2); spy(M); %可视化稀疏结构,排查是否有整行全为0 %% 4. Apply boundary springs (clamped, simply supported, free as in Table 1) [K,M]=springBC(A,B,D_mat,As,R1,K, M, nodes, ndof,bc_type,Phi,supp); %% 5. Solve eigenproblem eigMode = 20; % opts.issym = 1; opts.isreal=1; [V,D] = eigs(K,M,eigMode,'SM'); freq = sqrt(diag(D))/(2*pi); [~, idx] = sort(freq); freq = freq(idx); V = V(:, idx); % % 过滤非物理解 % valid_idx = imag(freq) == 0 & freq > 0 & freq < 1e10; % freq = freq(valid_idx); % V = V(:, valid_idx); disp('Natural frequencies (Hz):'); disp(freq); %% --- Functions --- function Rb = radialRB(r, type, dc, q) switch type case 'MQ', Rb = (r^2 + dc^2)^q; end end function Tm = tchebyBasis(xp,tp,mp,mq) m=mp*mq; if m==0 Tm=[]; else Tm = zeros(length(xp),m); for i=1:length(xp) x=xp(i); t=tp(i); Te = zeros(1,m); % 计算二维切比雪夫基 for P=0:mp-1 for Q=0:mq-1 PQ=P*mq+Q+1; Te(PQ)=cos(Q*acos(t))*cos(P*acos(x)); end end Tm(i,:)=Te; end end end function Phi = computeShape(suppCoord, evalCoord, Ginv, rbf_type, dc, q, mp,mq, L, phiSpan, R) nn = size(suppCoord,1); % distances & derivatives at eval Re = zeros(1,nn); dRe_x=zeros(1,nn); dRe_t=zeros(1,nn); dRe_xx=zeros(1,nn); dRe_xt=zeros(1,nn); dRe_tt=zeros(1,nn); for i=1:nn dx = evalCoord(1)-suppCoord(i,1); % dt = evalCoord(2)-suppCoord(i,2); % r = sqrt(dx^2 - R^2*(2*cos(dt)-2)); dt = wrapToPi((evalCoord(2)-suppCoord(i,2))); r = sqrt(dx^2 + dt^2*R^2); switch rbf_type case 'MQ' % Re(i) = (r^2 + dc^2)^q; % dRe_x(i) = 2*q*(r^2 + dc^2)^(q-1)*dx; % dRe_t(i) = 2*q*(r^2 + dc^2)^(q-1)*R^2*sin(dt); % dRe_xx(i) = 2*q*(r^2 + dc^2)^(q-1) + 4*(q-1)*q*dx^2*(r^2 + dc^2)^(q-2); % dRe_xt(i) = 4*(q-1)*q*dx*R^2*sin(dt)*(r^2 + dc^2)^(q-2); % dRe_tt(i) = 2*q*(r^2 + dc^2)^(q-1)*R^2*cos(dt)+ 4*q*(q-1)*R^4*(sin(dt))^2*(r^2 + dc^2)^(q-2); Re(i) = (r^2 + dc^2)^q; dRe_x(i) = 2*q*(r^2 + dc^2)^(q-1)*dx; dRe_t(i) = 2*q*(r^2 + dc^2)^(q-1)*R^2*dt; dRe_xx(i) = 2*q*(r^2 + dc^2)^(q-1) + 4*(q-1)*q*dx^2*(r^2 + dc^2)^(q-2); dRe_xt(i) = 4*(q-1)*q*dx*R^2*dt*(r^2 + dc^2)^(q-2); dRe_tt(i) = 2*q*(r^2 + dc^2)^(q-1)*R^2+ 4*q*(q-1)*R^4*dt^2*(r^2 + dc^2)^(q-2); end end % Tcheby at eval x = 2*(evalCoord(1)-0)/L -1; t = 2*(evalCoord(2)-0)/phiSpan -1; m=mp*mq; Te = zeros(1,m); dTe_x=zeros(1,m); dTe_t=zeros(1,m); dTe_xx=zeros(1,m); dTe_xt=zeros(1,m); dTe_tt=zeros(1,m); % 计算切比雪夫多项式 [Tx, dTx_norm, d2Tx_norm] = chebyshevT_derivatives(0:mp-1, x); [Ty, dTy_norm, d2Ty_norm] = chebyshevT_derivatives(0:mq-1, t); % 应用坐标变换的导数修正 dTx = dTx_norm * 2/L; d2Tx = d2Tx_norm * (2/L)^2; dTy = dTy_norm * 2/phiSpan; d2Ty = d2Ty_norm * (2/phiSpan)^2; % 计算二维切比雪夫基 idx=1; for P=1:mp for Q=1:mq Te(idx)= Tx(P)*Ty(Q); dTe_x(idx)= dTx(P)*Ty(Q); dTe_t(idx)= Tx(P)*dTy(Q); dTe_xx(idx)= d2Tx(P)*Ty(Q); dTe_xt(idx)= dTx(P)*dTy(Q); dTe_tt(idx)= Tx(P)*d2Ty(Q); idx = idx + 1; end end % assemble Phi at eval % Phi_bar(1,:) = round([Re,Te]*Ginv,5); Phi_bar(1,:) = [Re,Te]*Ginv; Phi_bar(2,:) = [dRe_x,dTe_x]*Ginv; Phi_bar(3,:) = [dRe_t,dTe_t]*Ginv; Phi_bar(4,:) = [dRe_xx,dTe_xx]*Ginv; Phi_bar(5,:) = [dRe_xt,dTe_xt]*Ginv; Phi_bar(6,:) = [dRe_tt,dTe_tt]*Ginv; Phi=Phi_bar(:,1:nn); end function [T, dT, d2T] = chebyshevT_derivatives(n, x) % 计算切比雪夫多项式 T_n(x) 及其一阶、二阶导数 x = x(:); % 转换为列向量 T = zeros(length(x), length(n)); dT = zeros(length(x), length(n)); d2T = zeros(length(x), length(n)); for i = 1:length(n) order = n(i); if order == 0 T(:,i) = ones(size(x)); dT(:,i) = zeros(size(x)); d2T(:,i) = zeros(size(x)); elseif order == 1 T(:,i) = x; dT(:,i) = ones(size(x)); d2T(:,i) = zeros(size(x)); else % 初始化递推 T0 = ones(size(x)); T1 = x; dT0 = zeros(size(x)); dT1 = ones(size(x)); d2T0 = zeros(size(x)); d2T1 = zeros(size(x)); % 递推计算 for k = 2:order T2 = 2*x.*T1 - T0; dT2 = 2*T1 + 2*x.*dT1 - dT0; d2T2 = 4*dT1 + 2*x.*d2T1 - d2T0; % 更新 T0 = T1; T1 = T2; dT0 = dT1; dT1 = dT2; d2T0 = d2T1; d2T1 = d2T2; end T(:,i) = T1; dT(:,i) = dT1; d2T(:,i) = d2T1; end end end function [Ki,Mi] = localKM(Phi, A, B, D, As, R, I0, I1, I2) ndof=5; nn=size(Phi,2); Ki = zeros(ndof,ndof,nn); Mi = zeros(ndof,ndof,nn); for j=1:nn phi=Phi(1,j); dphidx=Phi(2,j); dphidt=Phi(3,j); dphidxx=Phi(4,j); dphidxt=Phi(5,j); dphidtt=Phi(6,j); % K Tn11 = A(1,1) * dphidxx + (A(3,3)/R^2) * dphidtt + (2*A(1,3)/R) * dphidxt; Tn12 = A(1,3) * dphidxx + (A(1,2)/R) * dphidxt + (A(3,3)/R) * dphidxt + (A(2,3)/R^2) * dphidtt; Tn13 = (A(1,2)/R) * dphidx + (A(2,3)/R^2) * dphidt; Tn14 = B(1,1) * dphidxx + (2*B(1,3)/R) * dphidxt + (B(3,3)/R^2) * dphidtt; Tn15 = B(1,3) * dphidxx + (B(1,2)/R) * dphidxt + (B(3,3)/R) * dphidxt + (B(2,3)/R^2) * dphidtt; Tn21 = Tn12; Tn22 = A(3,3) * dphidxx + (A(2,2)/R^2) * dphidtt + (2*A(2,3)/R) * dphidxt - (As(1,1)/R^2) * phi; Tn23 = (A(2,3)/R) * dphidx + (A(2,2)/R^2) * dphidt + (As(1,2)/R) * dphidx + (As(1,1)/R^2) * dphidt; Tn24 = B(1,3) * dphidxx + (B(1,2)/R) * dphidxt + (B(3,3)/R) * dphidxt + (B(2,3)/R^2) * dphidtt + (As(1,2)/R) * phi; Tn25 = B(3,3) * dphidxx + (2*B(2,3)/R) * dphidxt + (B(2,2)/R^2) * dphidtt + (As(1,1)/R) * phi; Tn31 = -Tn13; Tn32 = -Tn23; Tn33 = As(2,2) * dphidxx - (A(2,2)/R^2) * phi + (As(1,1)/R^2) * dphidtt + (2*As(1,2)/R) * dphidxt; Tn34 = As(2,2) * dphidx - (B(1,2)/R) * dphidx - (B(2,3)/R^2) * dphidt + (As(1,2)/R) * dphidt; Tn35 = As(1,2) * dphidx - (B(2,3)/R) * dphidx - (B(2,2)/R^2) * dphidt + (As(1,1)/R) * dphidt; Tn41 = Tn14; Tn42 = Tn24; Tn43 = -Tn34; Tn44 = D(1,1) * dphidxx - As(2,2) * phi + (D(3,3)/R^2) * dphidtt + (2*D(1,3)/R) * dphidxt; Tn45 = D(1,3) * dphidxx + (D(1,2)/R) * dphidxt + (D(3,3)/R) * dphidxt + (D(2,3)/R^2) * dphidtt - As(1,2) * phi; Tn51 = Tn15; Tn52 = Tn25; Tn53 = -Tn35; Tn54 = Tn45; Tn55 = D(3,3) * dphidxx - As(1,1) * phi + (D(2,2)/R^2) * dphidtt + (2*D(2,3)/R) * dphidxt; Kij= [Tn11, Tn12, Tn13, Tn14, Tn15; Tn21, Tn22, Tn23, Tn24, Tn25; Tn31, Tn32, Tn33, Tn34, Tn35; Tn41, Tn42, Tn43, Tn44, Tn45; Tn51, Tn52, Tn53, Tn54, Tn55]; Ki(:,:,j)=Kij; % M Mij= -[I0*phi,0,0,I1*phi,0; 0,I0*phi,0,0,I1*phi; 0,0,I0*phi,0,0; I1*phi,0,0,I2*phi,0; 0,I1*phi,0,0,I2*phi]; Mi(:,:,j)=Mij; end end function [K,M]=springBC(A,B,D,As,R,K,M,nodes,ndof,bc_type,allPhi,supp) % Example: clamp x=0 and x=L, free elsewhere switch bc_type case 'F' %自由 ku=0;kv=0;kw=0;kx=0;kt=0; case 'S' %简支 ku=10^14;kv=10^14;kw=10^14;kx=0;kt=10^14; case 'SD' %弹性简支 ku=0;kv=10^14;kw=10^14;kx=0;kt=0; case 'C' %固支 ku=10^14;kv=10^14;kw=10^14;kx=10^14;kt=10^14; case 'E' %任意弹性 ku=10^7;kv=10^14;kw=10^14;kx=10^14;kt=10^14; end tol = 1e-8; N = size(nodes,1); for i=1:N Phi=allPhi{i}; phi=Phi(1,:); dphidx=Phi(2,:); dphidt=Phi(3,:); x = nodes(i,1); t = nodes(i,2); indices=supp{i}; nn=length(indices); if abs(x)<tol for j=1:nn Cxn=calculate_Cxn(A,B,D,As,R,phi(j),dphidx(j),dphidt(j)); k_spring=blkdiag(ku,kv,kw,kx,kt)* phi(j); dofl = (indices(j)-1)*ndof+1:indices(j)*ndof; dofh = (i-1)*ndof+1:i*ndof; K(dofh,dofl)=0; M(dofh,dofl)=0; K(dofh,dofl)=Cxn-k_spring; end elseif abs(x- max(nodes(:,1)))<tol for j=1:nn Cxn=calculate_Cxn(A,B,D,As,R,phi(j),dphidx(j),dphidt(j)); k_spring=blkdiag(ku,kv,kw,kx,kt)* phi(j); dofl = (indices(j)-1)*ndof+1:indices(j)*ndof; dofh = (i-1)*ndof+1:i*ndof; K(dofh,dofl)=0; M(dofh,dofl)=0; K(dofh,dofl)=Cxn+k_spring; end elseif abs(t)<tol for j=1:nn Ctn=calculate_Ctn(A,B,D,As,R,phi(j),dphidx(j),dphidt(j)); k_spring=blkdiag(ku,kv,kw,kx,kt)* phi(j); dofl = (indices(j)-1)*ndof+1:indices(j)*ndof; dofh = (i-1)*ndof+1:i*ndof; K(dofh,dofl)=0; M(dofh,dofl)=0; K(dofh,dofl)=Ctn-k_spring; end elseif abs(t- max(nodes(:,2)))<tol for j=1:nn Ctn=calculate_Ctn(A,B,D,As,R,phi(j),dphidx(j),dphidt(j)); k_spring=blkdiag(ku,kv,kw,kx,kt)* phi(j); dofl = (indices(j)-1)*ndof+1:indices(j)*ndof; dofh = (i-1)*ndof+1:i*ndof; K(dofh,dofl)=0; M(dofh,dofl)=0; K(dofh,dofl)=Ctn+k_spring; end end end end function Cxn=calculate_Cxn(A,B,D,As,R,phi,dphidx,dphidt) Cxn11 = A(1,1) * dphidx + A(1,3)/R * dphidt; Cxn12 = A(1,3) * dphidx + A(1,2)/R * dphidt; Cxn13 = A(1,2)/R * phi; Cxn14 = B(1,1) * dphidx + B(1,3)/R * dphidt; Cxn15 = B(1,3) * dphidx + B(1,2)/R * dphidt; Cxn21 = A(1,3) * dphidx + A(3,3)/R * dphidt; Cxn22 = A(3,3) * dphidx + A(2,3)/R * dphidt; Cxn23 = A(2,3)/R * phi; Cxn24 = B(1,3) * dphidx + B(3,3)/R * dphidt; Cxn25 = B(3,3) * dphidx + B(2,3)/R * dphidt; Cxn31 = 0; Cxn32 = -As(1,2)/R * phi; Cxn33 = As(2,2) * dphidx + As(1,2)/R * dphidt; Cxn34 = As(2,2) * phi; Cxn35 = As(1,2) * phi; Cxn41 = Cxn14; Cxn42 = Cxn15; Cxn43 = B(1,2)/R * phi; Cxn44 = D(1,1) * dphidx + D(1,3)/R * dphidt; Cxn45 = D(1,3) * dphidx + D(1,2)/R * dphidt; Cxn51 = Cxn24; Cxn52 = Cxn25; Cxn53 = B(2,3)/R * phi; Cxn54 = D(1,3) * dphidx + D(3,3)/R * dphidt; Cxn55 = D(3,3) * dphidx + D(2,3)/R * dphidt; Cxn= [Cxn11, Cxn12, Cxn13, Cxn14, Cxn15; Cxn21, Cxn22, Cxn23, Cxn24, Cxn25; Cxn31, Cxn32, Cxn33, Cxn34, Cxn35; Cxn41, Cxn42, Cxn43, Cxn44, Cxn45; Cxn51, Cxn52, Cxn53, Cxn54, Cxn55]; end function Ctn=calculate_Ctn(A,B,D,As,R,phi,dphidx,dphidt) Ctn11 = A(1,3) * dphidx + A(3,3)/R * dphidt; Ctn12 = A(3,3) * dphidx + A(2,3)/R * dphidt; Ctn13 = A(2,3)/R * phi; Ctn14 = B(1,3) * dphidx + B(3,3)/R * dphidt; Ctn15 = B(3,3) * dphidx + B(2,3)/R * dphidt; Ctn21 = A(1,2) * dphidx + A(2,3)/R * dphidt; Ctn22 = A(2,3) * dphidx + A(2,2)/R * dphidt; Ctn23 = A(2,2)/R * phi; Ctn24 = B(1,2) * dphidx + B(2,3)/R * dphidt; Ctn25 = B(2,3) * dphidx + B(2,2)/R * dphidt; Ctn31 = 0; Ctn32 = -As(1,1)/R * phi; Ctn33 = As(1,2) * dphidx + As(1,1)/R * dphidt; Ctn34 = As(1,2) * phi; Ctn35 = As(1,1) * phi; Ctn41 = Ctn14; Ctn42 = Ctn15; Ctn43 = B(2,3)/R * phi; Ctn44 = D(1,3) * dphidx + D(3,3)/R * dphidt; Ctn45 = D(3,3) * dphidx + D(2,3)/R * dphidt; Ctn51 = Ctn24; Ctn52 = Ctn25; Ctn53 = B(2,2)/R * phi; Ctn54 = D(1,2) * dphidx + D(2,3)/R * dphidt; Ctn55 = D(2,3) * dphidx + D(2,2)/R * dphidt; Ctn= [Ctn11, Ctn12, Ctn13, Ctn14, Ctn15; Ctn21, Ctn22, Ctn23, Ctn24, Ctn25; Ctn31, Ctn32, Ctn33, Ctn34, Ctn35; Ctn41, Ctn42, Ctn43, Ctn44, Ctn45; Ctn51, Ctn52, Ctn53, Ctn54, Ctn55]; end function [A,B,D,As,I] = laminateABD(layup,E1,E2,mu12,G12,G13,G23,h,rho,ks) Nk = numel(layup); z = linspace(-h/2,h/2,Nk+1); A=zeros(3); B=zeros(3); D=zeros(3); As = zeros(2); I = [0, 0, 0]; for k=1:Nk th=layup(k)*pi/180; c=cos(th); s=sin(th); [Q,As0] = orthotropicQ(E1,E2,mu12,G12,G13,G23,ks); T = [c^2, s^2, -2*c*s; s^2, c^2, 2*c*s; c*s, -c*s, c^2-s^2]; Qbar = T*Q*T'; % transform Ts = [c, s; -s, c]; Asbar = Ts * As0 * Ts'; A = A + Qbar*(z(k+1)-z(k)); B = B + Qbar*(z(k+1)^2-z(k)^2)/2; D = D + Qbar*(z(k+1)^3-z(k)^3)/3; As = As + Asbar * (z(k+1) - z(k)); I = I + rho * [(z(k+1) - z(k)), (z(k+1)^2 - z(k)^2)/2, (z(k+1)^3 - z(k)^3)/3]; % A=round(A,5); % B=round(B,5); % D=round(D,5); % As=round(As,5); end end function [Q,As] = orthotropicQ(E1,E2,mu12,G12,G13,G23,ks) mu21 = E2*mu12/E1; Q = [E1/(1-mu12*mu21), mu12*E2/(1-mu12*mu21), 0; mu12*E2/(1-mu12*mu21), E2/(1-mu12*mu21), 0; 0,0,G12]; As = [ks*G23, 0; 0, ks*G13]; end function f=draw_shell(nodes) f=figure; % 生成示例数据 x = nodes(:,1); y = nodes(:,2); z = nodes(:,3); % 绘制三维点 scatter3(x, y, z, 'filled'); hold on; % 添加标题和坐标轴标签 title('三维点图'); xlabel('X轴'); ylabel('Y轴'); zlabel('Z轴'); % 设置坐标轴比例一致 axis equal; end 这是我的代码,你帮我分析分析
06-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值