Реализую на си. За основу взят метод Ньютона. Программа вроде работает, но только для уравнений имеющих n корней. Для уравнений с меньшим или вообще равным 0 числом корней программа уходит в бесконечный цикл, т.к. я не указал условие проверки - имеет корни вообще данное уравнение или нет. Подскажите какое это должно быть условие? Каким образом узнать имеет данное уравнение корни или нет (т.е. пересекает ли график функции ось х или нет)? Вообщем, вопрос больше из курса алгебры, но я в ней не особо силен Спасибо.
| Код | #include <stdio.h> #include <math.h> int t,n; double g,h,f,s,a; int mass[]={0,0,0,0,0,0,0,0,0,0,0}; int z[]={0,0,0,0,0,0,0,0,0,0};
void big_func(void) { do { h=0; for(t=0;t<=n;t++){ printf ("=%i\n", mass[t]); g=mass[t]*pow(a,n-t); h=h+g;} f=h; printf ("Uravn ravno %f\n",h); s=0; for(t=n;t>=0;t--){ g=t*mass[n-t]*pow(a,t-1); s=s+g;} printf ("Proizv ravna %f\n",s); a=a-(h/s); printf ("interac koren %f\n",a);} while (abs(f)>=0.00000001); printf ("f ravno %f\n",f);
z[0]=mass[0]; for(t=0;t<n;t++){ z[t+1]=mass[t+1]+z[t]*a; mass[t]=z[t]; printf ("%i koef = %i\n",t+1,mass[t]);} } int main () { puts ("Vvedite starshuu stepen"); scanf ("%i",&n); printf ("Naivishaya stepen uravneniya = %i\n",n); for(t=0;t<=n;t++){ printf ("vvedite %i koeficient\n",t+1); scanf ("%i",&mass[t]);} a=2; for (t=n;t>0;t--){ big_func(); printf ("1 kor %f\n",a); n=n-1;} return(0); }
|
|