Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
gzewani
0 / 0 / 0
Регистрация: 26.12.2013
Сообщений: 13
1

Не могу исправить php код preg_replace() , Parse error: syntax error, unexpected ';'

19.11.2014, 12:41. Просмотров 878. Ответов 10
Метки нет (Все метки)

Здравствуйте,
Никак не могу разобраться как исправить ошибку. Код выполняет одномерную оптимизацию.
при задании входных параметров
"Функция f(x) = 10*x*ln(x)-x*x/2
начальная точка x1 = 0.5
шаг 0.2
1 итерация"

Выдаёт "Parse error: syntax error, unexpected ';' in W:\home\laba1.ru\www\kvadr_interpol_rez.php(63) : regexp code on line 1

Fatal error: preg_replace() [<a href='function.preg-replace'>function.preg-replace</a>]: Failed evaluating code: (0.5)- in W:\home\laba1.ru\www\kvadr_interpol_rez.php on line 63"

Кто поможет разобраться?


PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
<?php
 
function func1($arg)
 
{
 
    $str=$_POST['function1'];  //получили функцию пользователя в виде строки
 
            //если встречается в функции exp(), т.е. эспонента
 
            if (strpos($str, "exp")!==false)
 
            {
 
            $s1 = strpos($str, "exp"); //позиция с которой начинается exp
 
            $s2 = strpos($str, ")", $s1); //номер элемента, где кончается exp
 
            $expon=substr($str, $s1, $s2+1); //вырезаем выражение экспоненты
 
            $s1 = strpos($expon, "("); //позиция “(“
 
$s2 = strpos($expon, ")"); //позиция “)“
 
            $s1 = substr($expon, $s1, $s2); //вырезает выражение под экспонентой
 
            $s1 = str_replace("x",$arg,$s1);//заменяем все x на аргумент в функции
 
//подсчитаем выражение под знаком exp
 
            $vexp = (float) preg_replace( '/([0-9\(\)\*\-\+\/\.]*)/e', '\\1', $s1 );
 
$rezexp=exp($vexp);//вычисляем непосредственно экспоненту
 
//замена выражения exp() в строке $str на посчитанное число
 
            $str = str_replace($expon,$rezexp,$str);      
 
}
 
            //если встречается в функции пользователя ln(), т.е. натуральный логарифм
 
            if (strpos($str, "ln")!==false)
 
            {
 
            $l1 = strpos($str, "ln"); // позиция, с которой начинается ln()
 
            $l2 = strpos($str, ")", $l1); // конец выражения ln()
 
            $lnln=substr($str, $l1, $l2+1); // все выражение логарифма
 
            $l1 = strpos($lnln, "(" );
 
            $l2 = strpos($lnln, ")" );
 
            $l1 = substr($lnln, $l1, $l2); //вырезает выражение под логарифмом
 
            $l1 = str_replace("x",$arg,$l1); //заменяем все x на переданный аргумент
 
//подсчитаем выражение под знаком логарифма
 
            $vln = (float) preg_replace( '/([0-9\(\)\*\-\+\/\.]*)/e', '\\1', $l1 );
 
            $rezln=log($vln); //вычисляем непосредственно натуральный логарифм
 
            $str = str_replace($lnln,$rezln,$str);//замена ln() на посчитанное число
 
            }
 
            //замена х на переданное число
 
            $str = str_replace("x",$arg,$str);
 
            //результат
 
            $str = (float) preg_replace( '/([0-9\(\)\*\-\+\/\.]*)/e', '\\1', $str );
 
    return $str;
 
}
 
 
 
function polinom($x,$y,$z,$fx,$fy,$fz)
 
{
 
 $rez=0.5*((($y*$y-$z*$z)*$fx+($z*$z-$x*$x)*$fy+($x*$x-$y*$y)*$fz)/(($y-$z)*$fx+($z-$x)*$fy+($x-$y)*$fz));
 
    return $rez;
 
}
 
 
 
 
 
$function1=$_POST['function1'];
 
$x1 = $_POST['x1'];
 
$step = $_POST['step'];
 
$toch = $_POST['toch'];
 
echo "Функция f(x) = ",$function1,"<br>";
 
echo "начальная точка x1 = ",$x1,"<br>","шаг ",$step,"<br>";
 
echo "1 итерация","<br>";
 
$x2=$x1+$step; // вычисляем х2
 
$f1 = func1($x1); // вычисляем f(x1)
 
$f2 = func1($x2); // вычисляем f(x2)
 
if ($f1 > $f2) { $x3=$x1+2*$step;} else {$x3=$x1-$step;} // вычисляем х3
 
$f3 = func1($x3);
 
$fmin=min($f1,min($f2,$f3)); // находим минимальное среди f(x1), f(x2), f(x3)
 
//поиск xmin
 
if ($fmin == $f1) {$xmin=$x1;}
 
if ($fmin == $f2) {$xmin=$x2;}
 
if ($fmin == $f3) {$xmin=$x3;}
 
//вычислим знаменатель полинома и проверим его на 0
 
$znam=($x2-$x3)*$f1+($x3-$x1)*$f2+($x1-$x2)*$f3;
 
while ($znam == 0) {
 
//если знаменатель 0, то х1=Xmin и заново пересчитываем
 
$x1 = $xmin; $x2=$x1+$step; $f1 = func1($x1); $f2 = func1($x2);
 
if ($f1 > $f2) {$x3=$x1+2*$step;} else {$x3=$x1-$step;}
 
$f3 = func1($x3);
 
$fmin=min($f1,min($f2,$f3));
 
if ($fmin == $f1) {$xmin=$x1;}
 
if ($fmin == $f2) {$xmin=$x2;}
 
if ($fmin == $f3) {$xmin=$x3;}
 
}
 
$sr=polinom($x1,$x2,$x3,$f1,$f2,$f3); //вычислим значение по формуле (8)
 
$fsr=func1($sr);
 
echo "x = ",$sr,"<br>";
 
echo "f(x) = ",$fsr,"<br>";
 
$l=0; //счетчик циклов
 
 
while ((($fmin-$fsr) > $toch) || (($fmin-$fsr) < -$toch))
 
// пока не достигнута заданная точность
 
{
 
$l=$l+1; // счетчик итераций
 
echo $l+1," итерация","<br>";
 
 
if (($sr >= min($x1,min($x2,$x3))) && ($sr <= max($x1,max($x2,$x3))))
 
{
 
// выбор наилучшей точки и двух точек по бокам
 
if ($xmin < $sr) // если лучшей точкой является Xmin
 
{ // создаем массив всех точек
 
if ($xmin == $x1) { $massiv[0]=$xmin; $massiv[1]=$x2; $massiv[2]=$x3; $massiv[3]=$sr;}
 
if ($xmin == $x2) { $massiv[0]=$xmin; $massiv[1]=$x1; $massiv[2]=$x3; $massiv[3]=$sr;}
 
if ($xmin == $x3) { $massiv[0]=$xmin; $massiv[1]=$x1; $massiv[2]=$x2; $massiv[3]=$sr;}
 
// сортируем массив методом пузырька по возрастанию
 
for ($j = 0; $j < count($massiv)-2; $j++) {
 
            for ($i = 0; $i < count($massiv)-$j-1; $i++) {
 
                        if ($massiv[$i]>$massiv[$i+1])
 
{$m=$massiv[$i+1];$massiv[$i+1]=$massiv[$i];$massiv[$i]=$m; }}}
 
            //располагаем точки в правильном порядке
 
if (($massiv[0] == $xmin) || ($massiv[1] == $xmin)) {$x1=$massiv[0];$x2=$massiv[1];$x3=$massiv[2];}
 
if (($massiv[2] == $xmin) || ($massiv[3] == $xmin)) {$x1=$massiv[1];$x2=$massiv[2];$x3=$massiv[3];}
 
$f1=func1($x1);
 
$f2=func1($x2);
 
$f3=func1($x3);
 
$fmin=min($f1,min($f2,$f3));
 
if ($fmin == $f1) {$xmin=$x1;}
 
if ($fmin == $f2) {$xmin=$x2;}
 
if ($fmin == $f3) {$xmin=$x3;}
 
//вычислим знаменатель и проверим его на 0
 
$znam=($x2-$x3)*$f1+($x3-$x1)*$f2+($x1-$x2)*$f3;
 
while ($znam == 0) {
 
$x1 = $xmin; $x2=$x1+$step; $f1 = func1($x1); $f2 = func1($x2);
 
if ($f1 > $f2) {$x3=$x1+2*$step;} else {$x3=$x1-$step;}
 
$f3 = func1($x3);
 
$fmin=min($f1,min($f2,$f3));
 
if ($fmin == $f1) {$xmin=$x1;}
 
if ($fmin == $f2) { $xmin=$x2;}
 
if ($fmin == $f3) {$xmin=$x3;}}
 
//вычисляем ответ
 
$sr=polinom($x1,$x2,$x3,$f1,$f2,$f3);
 
$fsr=func1($sr);
 
echo "x = ",$sr,"<br>";
 
echo "f(x) = ",$fsr,"<br>";
 
}
 
else  //в противном случае, т.е. если лучшей точкой является sr
 
{
 
// заполняем массив
 
$massiv[0]=$sr; $massiv[1]=$x1; $massiv[2]=$x2; $massiv[3]=$x3;
 
//сортируем массив точек
 
for ($j = 0; $j < count($massiv)-2; $j++) {
 
            for ($i = 0; $i < count($massiv)-1-$j; $i++) {
 
                        if ($massiv[$i]>$massiv[$i+1])
 
{$m=$massiv[$i+1]; $massiv[$i+1]=$massiv[$i];$massiv[$i]=$m; }}}
 
if (($massiv[0] == $sr) || ($massiv[1] == $sr)) {$x1=$massiv[0];$x2=$massiv[1];$x3=$massiv[2];}
 
if (($massiv[2] == $sr) || ($massiv[3] == $sr)) {$x1=$massiv[1];$x2=$massiv[2];$x3=$massiv[3];}
 
$f1=func1($x1); $f2=func1($x2); $f3=func1($x3);
 
$fmin=min($f1,min($f2,$f3));
 
if ($fmin == $f1) {$xmin=$x1;}
 
if ($fmin == $f2) {$xmin=$x2;}
 
if ($fmin == $f3) {$xmin=$x3;}
 
//проверим знаменатель
 
$znam=($x2-$x3)*$f1+($x3-$x1)*$f2+($x1-$x2)*$f3;
 
while ($znam == 0) {
 
$x1 = $xmin; $x2=$x1+$step; $f1 = func1($x1); $f2 = func1($x2);
 
if ($f1 > $f2) {$x3=$x1+2*$step;} else {$x3=$x1-$step;}
 
$f3 = func1($x3);
 
$fmin=min($f1,min($f2,$f3));
 
if ($fmin == $f1) {$xmin=$x1;}
 
if ($fmin == $f2) {$xmin=$x2;}
 
if ($fmin == $f3) { $xmin=$x3;}}
 
//вычислим ответ данной итерации
 
$sr=polinom($x1,$x2,$x3,$f1,$f2,$f3);
 
$fsr=func1($sr);
 
echo "x = ",$sr,"<br>";
 
echo "f(x) = ",$fsr,"<br>";
 
}
 
}
 
else
 
{
 
// вычисление х1, х2, f1, f2, x3, f3, fmin
 
$x1=$sr; $x2=$x1+$step;
 
$f1=func1($x1); $f2=func1($x2);
 
if ($f1 > $f2) {$x3=$x1+2*$step;} else { $x3=$x1-$step;}
 
$f3 = func1($x3);
 
$fmin=min($f1,min($f2,$f3));
 
//поиск xmin
 
if ($fmin == $f1) {$xmin=$x1;}
 
if ($fmin == $f2) {$xmin=$x2;}
 
if ($fmin == $f3) {$xmin=$x3;}
 
//вычислим знаменатель и проверим его на 0
 
$znam=($x2-$x3)*$f1+($x3-$x1)*$f2+($x1-$x2)*$f3;
 
while ($znam == 0) {
 
$x1 = $xmin; $x2=$x1+$step; $f1 = func1($x1); $f2 = func1($x2);
 
if ($f1 > $f2) {  $x3=$x1+2*$step;} else { $x3=$x1-$step;}
 
$f3 = func1($x3);
 
$fmin=min($f1,min($f2,$f3));
 
if ($fmin == $f1) {$xmin=$x1;}
 
if ($fmin == $f2) {$xmin=$x2;}
 
if ($fmin == $f3) {$xmin=$x3;}
 
}
 
$sr=polinom($x1,$x2,$x3,$f1,$f2,$f3);
 
$fsr=func1($sr);
 
echo "x = ",$sr,"<br>";
 
echo "f(x) = ",$fsr,"<br>";
 
}
 
}
 
echo "Ответ: x = ",$sr;
 
?>
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2014, 12:41
Ответы с готовыми решениями:

Ошибка синтаксиса PHP. Parse error: syntax error, unexpected '}'
Всем привет. Пишу я модуль новостей для своего сайта и сталкиваюсь с парадоксом: Parse error:...

Ошибка Parse error: syntax error, unexpected '}' in D:\home\localhost\www\kursovik\vhod.php on line 28
Не могу понять в чём проблема &lt;?php include ('session.php'); include ('connection.php');...

Parse error: syntax error, unexpected T_STRING in Z:\home\localhost\www\files\101.php on line 4
&lt;form action = &quot;101.php&quot; method = &quot;GET&quot;&gt; &lt;!--&lt;input name=&quot;Имя переключателя&quot; type =&quot;Тип&quot;...

ошибка Parse error: syntax error, unexpected end of file in E:\OpenServer\domains\test.ru\index.php on line 23
&lt;!DOCTYPE html&gt; &lt;html lang=&quot;ru&quot;&gt; &lt;head&gt; &lt;title&gt;Калькулятор&lt;/title&gt; &lt;/head&gt; &lt;body&gt; ...

Parse error: syntax error, unexpected 'UrlInput' (T_STRING) in UrlInput.php on line 1
Здравствуйте. Вроде ничего не дела, а выскочила ошибка Parse error: syntax error, unexpected...

10
IcedElect
1 / 1 / 0
Регистрация: 08.03.2014
Сообщений: 85
20.11.2014, 12:48 2
Подпиши пожалуйста название файлов.И php файл один?
0
gzewani
0 / 0 / 0
Регистрация: 26.12.2013
Сообщений: 13
21.11.2014, 14:19  [ТС] 3
да, конечно.
Используются два файла.
первый index.html , для ввода переменных. из него вызывается kvadr_interpol_rez.php

Вот код index.html , код kvadr_interpol_rez.php написан в первом сообщении, Спасибо.
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<html>
 
<head>
 
<title>Метод Пауэлла</title>
 
<meta http-equiv='Content-type' content='text/html; charset=windows-1251'>
 
<link rel=stylesheet href='main.css' type='text/css'>
 
</head>
 
<body>
 
<h2>Квадратичная интерполяция (Метод Пауэлла)</h2><br>
 
<form action="kvadr_interpol_rez.php" method="post">
 
Введите функцию с одной переменной f(x)=
 
<input type="text" size="40" name="function1"><br>
 
Начальная точка<input type="text" size="5" name="x1">
 
Шаг<input type="text" size="5" name="step"><br>
 
Точность<input type="text" size="5" name="toch"><br>
 
<input type="submit" value="Далее">
 
</form>
 
</body>
 
</html>
0
illya05
139 / 95 / 47
Регистрация: 03.08.2013
Сообщений: 765
22.11.2014, 02:36 4
PHP
1
2
$vln = preg_replace( '/([0-9\(\)\*\-\+\/\.]*)/e', '\\1', $l1 );
$vln = (float) $vln;
Так попробуйте (строка 63)
0
22.11.2014, 02:36
gzewani
0 / 0 / 0
Регистрация: 26.12.2013
Сообщений: 13
22.11.2014, 22:59  [ТС] 5
Не помогло. Такая же самая ошибка.
0
Tatikoma
F́́́́́́́ŕ́́́́́́́é́́́ ́ak
259 / 223 / 109
Регистрация: 07.07.2014
Сообщений: 965
23.11.2014, 14:59 6
Он ругается на /e, написано же "failed eval...".

Что вы вообще хотели добиться этой регуляркой?
0
gzewani
0 / 0 / 0
Регистрация: 26.12.2013
Сообщений: 13
23.11.2014, 23:08  [ТС] 7
Добрый вечер,
Вроде как для замены искомой строки.
0
Tatikoma
F́́́́́́́ŕ́́́́́́́é́́́ ́ak
259 / 223 / 109
Регистрация: 07.07.2014
Сообщений: 965
24.11.2014, 18:51 8
gzewani, только замены? - Зачем тогда поставили модификатор /e ?

Модификатор /e:
1. Служит для исполнения полученного паттерна замены, как PHP-кода.
2. Устарел, если вам оно надо - используйте preg_replace_callback.

Вероятно вам нужно просто убрать этот модификатор и/или поставить другой. В любом случае перепроверьте свое регулярное выражение.
0
gzewani
0 / 0 / 0
Регистрация: 26.12.2013
Сообщений: 13
24.11.2014, 20:40  [ТС] 9
Можете помочь??
0
Tatikoma
F́́́́́́́ŕ́́́́́́́é́́́ ́ak
259 / 223 / 109
Регистрация: 07.07.2014
Сообщений: 965
25.11.2014, 12:49 10
gzewani, каким образом вы хотите, чтобы вам помогли?

Я уже объяснил, в чем проблема. Вы не можете сами посмотреть на свою же регулярку и исправить?
1
gzewani
0 / 0 / 0
Регистрация: 26.12.2013
Сообщений: 13
17.12.2014, 23:28  [ТС] 11
В то время я хорошенько заболел. Было не до блокнота. Всё равно спасибо. Сейчас реализовал алгоритм на C++
0
17.12.2014, 23:28
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2014, 23:28

Parse error: syntax error, unexpected 'text' (T_STRING), expecting ']'
Всем доброго дня! Пожалуйста помогите новичку: Столкнулся с проблемой в написании блога.. Вот часть...

Выскакивает ошибка Parse error: syntax error, unexpected T_STRING in
&lt;? $db = mysql_connect('localhost','root',''); mysql_select_db('oc',$db); $importFile =...

Parse error: syntax error, unexpected 'class' (T_CLASS), expecting function (T_FUNCTION)
ошибка Parse error: syntax error, unexpected 'class' (T_CLASS), expecting function (T_FUNCTION)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.