clc, clear all disp('Problema echilibrului cablului') x1=-2; y1=1; x2=3; y2=3; l=8; fprintf('Coordonatele capatului de stanga: y(%d)=%d\n',x1,y1) fprintf('Coordonatele capatului de dreapta: y(%d)=%d\n',x2,y2) fprintf('Lungimea cablului = %d\n',l) % Se scrie o functie in fisier care calculeaza membrul stang al sistemului % de 2 ecuatii neliniare din care se determina coeficientii c1 si c2 s{1}='function y = MyFunc(x)'; s{2}='C1=x(1); C2=x(2); y=x;'; s{3}=['y(1)=C1*(cosh((' char(sym(x2)) '-C2)/C1)-cosh((' char(sym(x1)) ... '-C2)/C1))-(' char(sym(y2)) ')+(' char(sym(y1)) ');']; s{4}=['y(2)=C1*(sinh((' char(sym(x2)) '-C2)/C1)-sinh((' char(sym(x1)) ... '-C2)/C1))-(' char(sym(l)) ');']; filename=fullfile(pwd,'MyFunc.m'); % numele fisierului disp(['Textul fisierului ' filename ':']) fprintf('%s\n',s{:}); fid=fopen(filename,'w'); % se deschide fisierul fprintf(fid,'%s\n',s{:}); % se scriu date in fisier fclose(fid); % se inchide fisierul xinit=[0.5;(x1+x2)/2]; % aproximatia initiala options=optimset('fsolve'); % optiunile standard options=optimset(options,'Display','off','MaxIter',1000,'TolX',1e-8); [xzero,fval,exitflag]=fsolve('MyFunc',xinit,options); if exitflag>0, disp('Solutia a fost determinata'); elseif exitflag<0, disp('Solutia nu a fost gasita - procedura iterativa nu converge'); else disp(['A fost efectuat nr maxim admisibil de iteratii - convergenta e lenta']); end C1=xzero(1); C2=xzero(2); lambda=C1*cosh((x1-C2)/C1)-y1; disp('Solutia sistemului:') fprintf('C1=%12.6f\nC2=%12.6f\nlambda=%12.6f\n',C1,C2,lambda) disp('Ecuatia curbei catenare:') fprintf('y(x)=%12.6f*ch((x%+12.6f)/%12.6f)%+12.6f',C1,C2,C1,lambda) % Se deseneaza graficul curbei catenare obtinute x142=linspace(x1,x2); % tabloul de abscise y142=C1*cosh((x142-C2)/C1)-lambda; % tabloul de ordonate plot(x142,y142) % se deseneaza graficul set(get(gcf,'CurrentAxes'),'FontName','Times New Roman','FontSize',11) xlim([x1 x2]) % limitele in raport cu axa Ox da=daspect; da(1:2)=min(da(1:2)); daspect(da); % se echilibreaza scara title ('\bfProblema echilibrului cablului') xlabel ('\itx') ylabel ('\ity\rm(\itx\rm)') legend('y(x)=1.478832*ch((x+0.122287)/1.478832)+2.281675',0) grid on, box on delete(filename)