אנליזה נומרית/שיטת חציית האינטרוולים/קוד מקור
מתוך ויקיספר, אוסף ספרי הלימוד והמדריכים החופשי.
[עריכה] חיפוש פשוט
[עריכה] שפת C
אזהרות:
- כאן יש אפשרות לתת תנאי עצירה רק על ערך הפונקציה ובמצבים קיצוניים גודל הקבוע accuracy לא יהיה מספיק.
- השיטה איטית להחריד כאשר לא ידוע כיצד לנחש בחכמה והיכן מונח השורש.
הנחות:
- הניחוש ההתחלתי הוא משמאל לשורש בו מעוניינים.
#include <stdio.h>
נגדיר את הפונקציה f, אשר את שורשיה אנו מחפשים:
float f(float x) { return 3*x-8; }
לשם ההמחשה נכתוב גם פונקציה עבור ערך מוחלט:
float abso(float x) { if (x<0) return -x; else return x; }
בפונקציה הראשית נצהיר קבועים ומשתנים:
int main() { float const accuracy=0.01; float const step=accuracy; float const bounds=4; float init,x; printf("\nInput initial position:\t"); scanf("%f",&init);
אתחול והרצת לולאה:
x=init;
while (abso(f(x))>accuracy && abso(x-init)<bounds)
x+=step;
על מנת לחפש שורש מצד שמאל לניחוש ההתחלתי, קידום המשתנה יעשה באמצעות "-=" על מנת להחסיר את הצעד step. לבסוף נבדוק את תנאי הדיוק ונסיים את התכנית:
if (abs(f(x))<accuracy)
printf("\nRoot: %f",x);
else
printf("\nRoots not found in bounds of %f",bounds);
return 0;
}