qlang 0.0.27182100 → 0.0.27182110

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2cd845cb653f28d2e83507b793e3c18d4df0c0b5
4
- data.tar.gz: 3318e7abc75c676cbd3e56713202f284e2905b81
3
+ metadata.gz: a48ba3d203a109ed171dbbd38e70c404c24b8018
4
+ data.tar.gz: f461876d32692c407a4333b31909adab2e12917c
5
5
  SHA512:
6
- metadata.gz: 1229fcf0b4fa7f8ef90eda3550d34924c0a137480361aae09cee032c865d536af56d7bc271723e3fb63db13cc22c33db7ebb39a5af4bb78b389f8ab86bb65800
7
- data.tar.gz: 3b9c3ffcd9591895f342f0828e96665538c24c3aa9920ffdb739f9a1388772ae83bc78c75890c9ec272f47e4e1029cf71944f53ca0ca8e2739eaed7bfeebc762
6
+ metadata.gz: 892ff464ca7f8614b6dbff92114998edb7c355016cfc6c9ba653a27024174fb301304d16cc9f339cc98e596d575af66890d7fa2c06df29fed03f267580d27f8d
7
+ data.tar.gz: 973791d37093853d5ed9ac0c2d19d171d5efdd2a4d46874093cad82bb1a93bce7eb047af4b94eb0ab406ca6a39bf4dfa67e018b7deb981ed9fd4242933d8a52a
data/bin/qlang CHANGED
@@ -23,7 +23,7 @@ when '-i'
23
23
  end
24
24
  when '-v'
25
25
  puts Qlang::VERSION
26
- when '-R', '-Ruby'
26
+ when '-r', '-rb', '-py'
27
27
  exec = Qlang::Exec::Compiler.new(ARGV)
28
28
  exec.output!
29
29
  end
@@ -29,6 +29,7 @@ _cached_p_roots.cache = dict()
29
29
 
30
30
 
31
31
  def fixed_quad(func,a,b,args=(),n=5):
32
+ a = array([1, 3, 4])
32
33
 
33
34
  [x,w] = _cached_p_roots(n)
34
35
  x = real(x)
@@ -90,337 +91,3 @@ def tupleset(t, i, value):
90
91
  l = list(t)
91
92
  l[i] = value
92
93
  return tuple(l)
93
-
94
-
95
- def cumtrapz(y, x=None, dx=1.0, axis=-1, initial=None):
96
- y = asarray(y)
97
- if x is None:
98
- d = dx
99
- else:
100
- x = asarray(x)
101
- if x.ndim == 1:
102
- d = diff(x)
103
- # reshape to correct shape
104
- shape = [1] * y.ndim
105
- shape[axis] = -1
106
- d = d.reshape(shape)
107
- elif len(x.shape) != len(y.shape):
108
- raise ValueError("If given, shape of x must be 1-d or the "
109
- "same as y.")
110
- else:
111
- d = diff(x, axis=axis)
112
-
113
- if d.shape[axis] != y.shape[axis] - 1:
114
- raise ValueError("If given, length of x along axis must be the "
115
- "same as y.")
116
-
117
- nd = len(y.shape)
118
- slice1 = tupleset((slice(None),)*nd, axis, slice(1, None))
119
- slice2 = tupleset((slice(None),)*nd, axis, slice(None, -1))
120
- res = add.accumulate(d * (y[slice1] + y[slice2]) / 2.0, axis)
121
-
122
- if initial is not None:
123
- if not np.isscalar(initial):
124
- raise ValueError("`initial` parameter should be a scalar.")
125
-
126
- shape = list(res.shape)
127
- shape[axis] = 1
128
- res = np.concatenate([np.ones(shape, dtype=res.dtype) * initial, res],
129
- axis=axis)
130
-
131
- return res
132
-
133
-
134
- def _basic_simps(y,start,stop,x,dx,axis):
135
- nd = len(y.shape)
136
- if start is None:
137
- start = 0
138
- step = 2
139
- all = (slice(None),)*nd
140
- slice0 = tupleset(all, axis, slice(start, stop, step))
141
- slice1 = tupleset(all, axis, slice(start+1, stop+1, step))
142
- slice2 = tupleset(all, axis, slice(start+2, stop+2, step))
143
-
144
- if x is None: # Even spaced Simpson's rule.
145
- result = add.reduce(dx/3.0 * (y[slice0]+4*y[slice1]+y[slice2]),
146
- axis)
147
- else:
148
- # Account for possibly different spacings.
149
- # Simpson's rule changes a bit.
150
- h = diff(x,axis=axis)
151
- sl0 = tupleset(all, axis, slice(start, stop, step))
152
- sl1 = tupleset(all, axis, slice(start+1, stop+1, step))
153
- h0 = h[sl0]
154
- h1 = h[sl1]
155
- hsum = h0 + h1
156
- hprod = h0 * h1
157
- h0divh1 = h0 / h1
158
- result = add.reduce(hsum/6.0*(y[slice0]*(2-1.0/h0divh1) +
159
- y[slice1]*hsum*hsum/hprod +
160
- y[slice2]*(2-h0divh1)),axis)
161
- return result
162
-
163
-
164
- def simps(y, x=None, dx=1, axis=-1, even='avg'):
165
-
166
- y = asarray(y)
167
- nd = len(y.shape)
168
- N = y.shape[axis]
169
- last_dx = dx
170
- first_dx = dx
171
- returnshape = 0
172
- if x is not None:
173
- x = asarray(x)
174
- if len(x.shape) == 1:
175
- shapex = ones(nd)
176
- shapex[axis] = x.shape[0]
177
- saveshape = x.shape
178
- returnshape = 1
179
- x = x.reshape(tuple(shapex))
180
- elif len(x.shape) != len(y.shape):
181
- raise ValueError("If given, shape of x must be 1-d or the "
182
- "same as y.")
183
- if x.shape[axis] != N:
184
- raise ValueError("If given, length of x along axis must be the "
185
- "same as y.")
186
- if N % 2 == 0:
187
- val = 0.0
188
- result = 0.0
189
- slice1 = (slice(None),)*nd
190
- slice2 = (slice(None),)*nd
191
- if even not in ['avg', 'last', 'first']:
192
- raise ValueError("Parameter 'even' must be 'avg', 'last', or 'first'.")
193
- # Compute using Simpson's rule on first intervals
194
- if even in ['avg', 'first']:
195
- slice1 = tupleset(slice1, axis, -1)
196
- slice2 = tupleset(slice2, axis, -2)
197
- if x is not None:
198
- last_dx = x[slice1] - x[slice2]
199
- val += 0.5*last_dx*(y[slice1]+y[slice2])
200
- result = _basic_simps(y,0,N-3,x,dx,axis)
201
- # Compute using Simpson's rule on last set of intervals
202
- if even in ['avg', 'last']:
203
- slice1 = tupleset(slice1, axis, 0)
204
- slice2 = tupleset(slice2, axis, 1)
205
- if x is not None:
206
- first_dx = x[tuple(slice2)] - x[tuple(slice1)]
207
- val += 0.5*first_dx*(y[slice2]+y[slice1])
208
- result += _basic_simps(y,1,N-2,x,dx,axis)
209
- if even == 'avg':
210
- val /= 2.0
211
- result /= 2.0
212
- result = result + val
213
- else:
214
- result = _basic_simps(y,0,N-2,x,dx,axis)
215
- if returnshape:
216
- x = x.reshape(saveshape)
217
- return result
218
-
219
-
220
- def romb(y, dx=1.0, axis=-1, show=False):
221
-
222
- y = asarray(y)
223
- nd = len(y.shape)
224
- Nsamps = y.shape[axis]
225
- Ninterv = Nsamps-1
226
- n = 1
227
- k = 0
228
- while n < Ninterv:
229
- n <<= 1
230
- k += 1
231
- if n != Ninterv:
232
- raise ValueError("Number of samples must be one plus a "
233
- "non-negative power of 2.")
234
-
235
- R = {}
236
- all = (slice(None),) * nd
237
- slice0 = tupleset(all, axis, 0)
238
- slicem1 = tupleset(all, axis, -1)
239
- h = Ninterv*asarray(dx)*1.0
240
- R[(0,0)] = (y[slice0] + y[slicem1])/2.0*h
241
- slice_R = all
242
- start = stop = step = Ninterv
243
- for i in range(1,k+1):
244
- start >>= 1
245
- slice_R = tupleset(slice_R, axis, slice(start,stop,step))
246
- step >>= 1
247
- R[(i,0)] = 0.5*(R[(i-1,0)] + h*add.reduce(y[slice_R],axis))
248
- for j in range(1,i+1):
249
- R[(i,j)] = R[(i,j-1)] + \
250
- (R[(i,j-1)]-R[(i-1,j-1)]) / ((1 << (2*j))-1)
251
- h = h / 2.0
252
-
253
- if show:
254
- if not isscalar(R[(0,0)]):
255
- print("*** Printing table only supported for integrals" +
256
- " of a single data set.")
257
- else:
258
- try:
259
- precis = show[0]
260
- except (TypeError, IndexError):
261
- precis = 5
262
- try:
263
- width = show[1]
264
- except (TypeError, IndexError):
265
- width = 8
266
- formstr = "%" + str(width) + '.' + str(precis)+'f'
267
-
268
- print("\n Richardson Extrapolation Table for Romberg Integration ")
269
- print("====================================================================")
270
- for i in range(0,k+1):
271
- for j in range(0,i+1):
272
- print(formstr % R[(i,j)], end=' ')
273
- print()
274
- print("====================================================================\n")
275
-
276
- return R[(k,k)]
277
-
278
-
279
- def _difftrap(function, interval, numtraps):
280
- if numtraps <= 0:
281
- raise ValueError("numtraps must be > 0 in difftrap().")
282
- elif numtraps == 1:
283
- return 0.5*(function(interval[0])+function(interval[1]))
284
- else:
285
- numtosum = numtraps/2
286
- h = float(interval[1]-interval[0])/numtosum
287
- lox = interval[0] + 0.5 * h
288
- points = lox + h * arange(0, numtosum)
289
- s = sum(function(points),0)
290
- return s
291
-
292
-
293
- def _romberg_diff(b, c, k):
294
-
295
- tmp = 4.0**k
296
- return (tmp * c - b)/(tmp - 1.0)
297
-
298
-
299
- def _printresmat(function, interval, resmat):
300
- # Print the Romberg result matrix.
301
- i = j = 0
302
- print('Romberg integration of', repr(function), end=' ')
303
- print('from', interval)
304
- print('')
305
- print('%6s %9s %9s' % ('Steps', 'StepSize', 'Results'))
306
- for i in range(len(resmat)):
307
- print('%6d %9f' % (2**i, (interval[1]-interval[0])/(2.**i)), end=' ')
308
- for j in range(i+1):
309
- print('%9f' % (resmat[i][j]), end=' ')
310
- print('')
311
- print('')
312
- print('The final result is', resmat[i][j], end=' ')
313
- print('after', 2**(len(resmat)-1)+1, 'function evaluations.')
314
-
315
-
316
- def romberg(function, a, b, args=(), tol=1.48e-8, rtol=1.48e-8, show=False,
317
- divmax=10, vec_func=False):
318
- if isinf(a) or isinf(b):
319
- raise ValueError("Romberg integration only available for finite limits.")
320
- vfunc = vectorize1(function, args, vec_func=vec_func)
321
- n = 1
322
- interval = [a,b]
323
- intrange = b-a
324
- ordsum = _difftrap(vfunc, interval, n)
325
- result = intrange * ordsum
326
- resmat = [[result]]
327
- err = np.inf
328
- for i in xrange(1, divmax+1):
329
- n = n * 2
330
- ordsum = ordsum + _difftrap(vfunc, interval, n)
331
- resmat.append([])
332
- resmat[i].append(intrange * ordsum / n)
333
- for k in range(i):
334
- resmat[i].append(_romberg_diff(resmat[i-1][k], resmat[i][k], k+1))
335
- result = resmat[i][i]
336
- lastresult = resmat[i-1][i-1]
337
-
338
- err = abs(result - lastresult)
339
- if err < tol or err < rtol*abs(result):
340
- break
341
- else:
342
- warnings.warn(
343
- "divmax (%d) exceeded. Latest difference = %e" % (divmax, err),
344
- AccuracyWarning)
345
-
346
- if show:
347
- _printresmat(vfunc, interval, resmat)
348
- return result
349
-
350
- _builtincoeffs = {
351
- 1:(1,2,[1,1],-1,12),
352
- 2:(1,3,[1,4,1],-1,90),
353
- 3:(3,8,[1,3,3,1],-3,80),
354
- 4:(2,45,[7,32,12,32,7],-8,945),
355
- 5:(5,288,[19,75,50,50,75,19],-275,12096),
356
- 6:(1,140,[41,216,27,272,27,216,41],-9,1400),
357
- 7:(7,17280,[751,3577,1323,2989,2989,1323,3577,751],-8183,518400),
358
- 8:(4,14175,[989,5888,-928,10496,-4540,10496,-928,5888,989],
359
- -2368,467775),
360
- 9:(9,89600,[2857,15741,1080,19344,5778,5778,19344,1080,
361
- 15741,2857], -4671, 394240),
362
- 10:(5,299376,[16067,106300,-48525,272400,-260550,427368,
363
- -260550,272400,-48525,106300,16067],
364
- -673175, 163459296),
365
- 11:(11,87091200,[2171465,13486539,-3237113, 25226685,-9595542,
366
- 15493566,15493566,-9595542,25226685,-3237113,
367
- 13486539,2171465], -2224234463, 237758976000),
368
- 12:(1, 5255250, [1364651,9903168,-7587864,35725120,-51491295,
369
- 87516288,-87797136,87516288,-51491295,35725120,
370
- -7587864,9903168,1364651], -3012, 875875),
371
- 13:(13, 402361344000,[8181904909, 56280729661, -31268252574,
372
- 156074417954,-151659573325,206683437987,
373
- -43111992612,-43111992612,206683437987,
374
- -151659573325,156074417954,-31268252574,
375
- 56280729661,8181904909], -2639651053,
376
- 344881152000),
377
- 14:(7, 2501928000, [90241897,710986864,-770720657,3501442784,
378
- -6625093363,12630121616,-16802270373,19534438464,
379
- -16802270373,12630121616,-6625093363,3501442784,
380
- -770720657,710986864,90241897], -3740727473,
381
- 1275983280000)
382
- }
383
-
384
-
385
- def newton_cotes(rn, equal=0):
386
- try:
387
- N = len(rn)-1
388
- if equal:
389
- rn = np.arange(N+1)
390
- elif np.all(np.diff(rn) == 1):
391
- equal = 1
392
- except:
393
- N = rn
394
- rn = np.arange(N+1)
395
- equal = 1
396
-
397
- if equal and N in _builtincoeffs:
398
- na, da, vi, nb, db = _builtincoeffs[N]
399
- return na*np.array(vi,float)/da, float(nb)/db
400
-
401
- if (rn[0] != 0) or (rn[-1] != N):
402
- raise ValueError("The sample positions must start at 0"
403
- " and end at N")
404
- yi = rn / float(N)
405
- ti = 2.0*yi - 1
406
- nvec = np.arange(0,N+1)
407
- C = ti**nvec[:,np.newaxis]
408
- Cinv = np.linalg.inv(C)
409
- # improve precision of result
410
- for i in range(2):
411
- Cinv = 2*Cinv - Cinv.dot(C).dot(Cinv)
412
- vec = 2.0 / (nvec[::2]+1)
413
- ai = np.dot(Cinv[:,::2],vec) * N/2
414
-
415
- if (N % 2 == 0) and equal:
416
- BN = N/(N+3.)
417
- power = N+2
418
- else:
419
- BN = N/(N+2.)
420
- power = N+1
421
-
422
- BN = BN - np.dot(yi**power, ai)
423
- p1 = power+1
424
- fac = power*math.log(N) - gammaln(p1)
425
- fac = math.exp(fac)
426
- return ai, BN*fac
@@ -29,6 +29,9 @@ _cached_p_roots.cache = dict()
29
29
 
30
30
 
31
31
  def fixed_quad(func,a,b,args=(),n=5):
32
+ I love mathematics.
33
+ a = (1 3 4)
34
+ Q.E.D
32
35
 
33
36
  [x,w] = _cached_p_roots(n)
34
37
  x = real(x)
@@ -90,337 +93,3 @@ def tupleset(t, i, value):
90
93
  l = list(t)
91
94
  l[i] = value
92
95
  return tuple(l)
93
-
94
-
95
- def cumtrapz(y, x=None, dx=1.0, axis=-1, initial=None):
96
- y = asarray(y)
97
- if x is None:
98
- d = dx
99
- else:
100
- x = asarray(x)
101
- if x.ndim == 1:
102
- d = diff(x)
103
- # reshape to correct shape
104
- shape = [1] * y.ndim
105
- shape[axis] = -1
106
- d = d.reshape(shape)
107
- elif len(x.shape) != len(y.shape):
108
- raise ValueError("If given, shape of x must be 1-d or the "
109
- "same as y.")
110
- else:
111
- d = diff(x, axis=axis)
112
-
113
- if d.shape[axis] != y.shape[axis] - 1:
114
- raise ValueError("If given, length of x along axis must be the "
115
- "same as y.")
116
-
117
- nd = len(y.shape)
118
- slice1 = tupleset((slice(None),)*nd, axis, slice(1, None))
119
- slice2 = tupleset((slice(None),)*nd, axis, slice(None, -1))
120
- res = add.accumulate(d * (y[slice1] + y[slice2]) / 2.0, axis)
121
-
122
- if initial is not None:
123
- if not np.isscalar(initial):
124
- raise ValueError("`initial` parameter should be a scalar.")
125
-
126
- shape = list(res.shape)
127
- shape[axis] = 1
128
- res = np.concatenate([np.ones(shape, dtype=res.dtype) * initial, res],
129
- axis=axis)
130
-
131
- return res
132
-
133
-
134
- def _basic_simps(y,start,stop,x,dx,axis):
135
- nd = len(y.shape)
136
- if start is None:
137
- start = 0
138
- step = 2
139
- all = (slice(None),)*nd
140
- slice0 = tupleset(all, axis, slice(start, stop, step))
141
- slice1 = tupleset(all, axis, slice(start+1, stop+1, step))
142
- slice2 = tupleset(all, axis, slice(start+2, stop+2, step))
143
-
144
- if x is None: # Even spaced Simpson's rule.
145
- result = add.reduce(dx/3.0 * (y[slice0]+4*y[slice1]+y[slice2]),
146
- axis)
147
- else:
148
- # Account for possibly different spacings.
149
- # Simpson's rule changes a bit.
150
- h = diff(x,axis=axis)
151
- sl0 = tupleset(all, axis, slice(start, stop, step))
152
- sl1 = tupleset(all, axis, slice(start+1, stop+1, step))
153
- h0 = h[sl0]
154
- h1 = h[sl1]
155
- hsum = h0 + h1
156
- hprod = h0 * h1
157
- h0divh1 = h0 / h1
158
- result = add.reduce(hsum/6.0*(y[slice0]*(2-1.0/h0divh1) +
159
- y[slice1]*hsum*hsum/hprod +
160
- y[slice2]*(2-h0divh1)),axis)
161
- return result
162
-
163
-
164
- def simps(y, x=None, dx=1, axis=-1, even='avg'):
165
-
166
- y = asarray(y)
167
- nd = len(y.shape)
168
- N = y.shape[axis]
169
- last_dx = dx
170
- first_dx = dx
171
- returnshape = 0
172
- if x is not None:
173
- x = asarray(x)
174
- if len(x.shape) == 1:
175
- shapex = ones(nd)
176
- shapex[axis] = x.shape[0]
177
- saveshape = x.shape
178
- returnshape = 1
179
- x = x.reshape(tuple(shapex))
180
- elif len(x.shape) != len(y.shape):
181
- raise ValueError("If given, shape of x must be 1-d or the "
182
- "same as y.")
183
- if x.shape[axis] != N:
184
- raise ValueError("If given, length of x along axis must be the "
185
- "same as y.")
186
- if N % 2 == 0:
187
- val = 0.0
188
- result = 0.0
189
- slice1 = (slice(None),)*nd
190
- slice2 = (slice(None),)*nd
191
- if even not in ['avg', 'last', 'first']:
192
- raise ValueError("Parameter 'even' must be 'avg', 'last', or 'first'.")
193
- # Compute using Simpson's rule on first intervals
194
- if even in ['avg', 'first']:
195
- slice1 = tupleset(slice1, axis, -1)
196
- slice2 = tupleset(slice2, axis, -2)
197
- if x is not None:
198
- last_dx = x[slice1] - x[slice2]
199
- val += 0.5*last_dx*(y[slice1]+y[slice2])
200
- result = _basic_simps(y,0,N-3,x,dx,axis)
201
- # Compute using Simpson's rule on last set of intervals
202
- if even in ['avg', 'last']:
203
- slice1 = tupleset(slice1, axis, 0)
204
- slice2 = tupleset(slice2, axis, 1)
205
- if x is not None:
206
- first_dx = x[tuple(slice2)] - x[tuple(slice1)]
207
- val += 0.5*first_dx*(y[slice2]+y[slice1])
208
- result += _basic_simps(y,1,N-2,x,dx,axis)
209
- if even == 'avg':
210
- val /= 2.0
211
- result /= 2.0
212
- result = result + val
213
- else:
214
- result = _basic_simps(y,0,N-2,x,dx,axis)
215
- if returnshape:
216
- x = x.reshape(saveshape)
217
- return result
218
-
219
-
220
- def romb(y, dx=1.0, axis=-1, show=False):
221
-
222
- y = asarray(y)
223
- nd = len(y.shape)
224
- Nsamps = y.shape[axis]
225
- Ninterv = Nsamps-1
226
- n = 1
227
- k = 0
228
- while n < Ninterv:
229
- n <<= 1
230
- k += 1
231
- if n != Ninterv:
232
- raise ValueError("Number of samples must be one plus a "
233
- "non-negative power of 2.")
234
-
235
- R = {}
236
- all = (slice(None),) * nd
237
- slice0 = tupleset(all, axis, 0)
238
- slicem1 = tupleset(all, axis, -1)
239
- h = Ninterv*asarray(dx)*1.0
240
- R[(0,0)] = (y[slice0] + y[slicem1])/2.0*h
241
- slice_R = all
242
- start = stop = step = Ninterv
243
- for i in range(1,k+1):
244
- start >>= 1
245
- slice_R = tupleset(slice_R, axis, slice(start,stop,step))
246
- step >>= 1
247
- R[(i,0)] = 0.5*(R[(i-1,0)] + h*add.reduce(y[slice_R],axis))
248
- for j in range(1,i+1):
249
- R[(i,j)] = R[(i,j-1)] + \
250
- (R[(i,j-1)]-R[(i-1,j-1)]) / ((1 << (2*j))-1)
251
- h = h / 2.0
252
-
253
- if show:
254
- if not isscalar(R[(0,0)]):
255
- print("*** Printing table only supported for integrals" +
256
- " of a single data set.")
257
- else:
258
- try:
259
- precis = show[0]
260
- except (TypeError, IndexError):
261
- precis = 5
262
- try:
263
- width = show[1]
264
- except (TypeError, IndexError):
265
- width = 8
266
- formstr = "%" + str(width) + '.' + str(precis)+'f'
267
-
268
- print("\n Richardson Extrapolation Table for Romberg Integration ")
269
- print("====================================================================")
270
- for i in range(0,k+1):
271
- for j in range(0,i+1):
272
- print(formstr % R[(i,j)], end=' ')
273
- print()
274
- print("====================================================================\n")
275
-
276
- return R[(k,k)]
277
-
278
-
279
- def _difftrap(function, interval, numtraps):
280
- if numtraps <= 0:
281
- raise ValueError("numtraps must be > 0 in difftrap().")
282
- elif numtraps == 1:
283
- return 0.5*(function(interval[0])+function(interval[1]))
284
- else:
285
- numtosum = numtraps/2
286
- h = float(interval[1]-interval[0])/numtosum
287
- lox = interval[0] + 0.5 * h
288
- points = lox + h * arange(0, numtosum)
289
- s = sum(function(points),0)
290
- return s
291
-
292
-
293
- def _romberg_diff(b, c, k):
294
-
295
- tmp = 4.0**k
296
- return (tmp * c - b)/(tmp - 1.0)
297
-
298
-
299
- def _printresmat(function, interval, resmat):
300
- # Print the Romberg result matrix.
301
- i = j = 0
302
- print('Romberg integration of', repr(function), end=' ')
303
- print('from', interval)
304
- print('')
305
- print('%6s %9s %9s' % ('Steps', 'StepSize', 'Results'))
306
- for i in range(len(resmat)):
307
- print('%6d %9f' % (2**i, (interval[1]-interval[0])/(2.**i)), end=' ')
308
- for j in range(i+1):
309
- print('%9f' % (resmat[i][j]), end=' ')
310
- print('')
311
- print('')
312
- print('The final result is', resmat[i][j], end=' ')
313
- print('after', 2**(len(resmat)-1)+1, 'function evaluations.')
314
-
315
-
316
- def romberg(function, a, b, args=(), tol=1.48e-8, rtol=1.48e-8, show=False,
317
- divmax=10, vec_func=False):
318
- if isinf(a) or isinf(b):
319
- raise ValueError("Romberg integration only available for finite limits.")
320
- vfunc = vectorize1(function, args, vec_func=vec_func)
321
- n = 1
322
- interval = [a,b]
323
- intrange = b-a
324
- ordsum = _difftrap(vfunc, interval, n)
325
- result = intrange * ordsum
326
- resmat = [[result]]
327
- err = np.inf
328
- for i in xrange(1, divmax+1):
329
- n = n * 2
330
- ordsum = ordsum + _difftrap(vfunc, interval, n)
331
- resmat.append([])
332
- resmat[i].append(intrange * ordsum / n)
333
- for k in range(i):
334
- resmat[i].append(_romberg_diff(resmat[i-1][k], resmat[i][k], k+1))
335
- result = resmat[i][i]
336
- lastresult = resmat[i-1][i-1]
337
-
338
- err = abs(result - lastresult)
339
- if err < tol or err < rtol*abs(result):
340
- break
341
- else:
342
- warnings.warn(
343
- "divmax (%d) exceeded. Latest difference = %e" % (divmax, err),
344
- AccuracyWarning)
345
-
346
- if show:
347
- _printresmat(vfunc, interval, resmat)
348
- return result
349
-
350
- _builtincoeffs = {
351
- 1:(1,2,[1,1],-1,12),
352
- 2:(1,3,[1,4,1],-1,90),
353
- 3:(3,8,[1,3,3,1],-3,80),
354
- 4:(2,45,[7,32,12,32,7],-8,945),
355
- 5:(5,288,[19,75,50,50,75,19],-275,12096),
356
- 6:(1,140,[41,216,27,272,27,216,41],-9,1400),
357
- 7:(7,17280,[751,3577,1323,2989,2989,1323,3577,751],-8183,518400),
358
- 8:(4,14175,[989,5888,-928,10496,-4540,10496,-928,5888,989],
359
- -2368,467775),
360
- 9:(9,89600,[2857,15741,1080,19344,5778,5778,19344,1080,
361
- 15741,2857], -4671, 394240),
362
- 10:(5,299376,[16067,106300,-48525,272400,-260550,427368,
363
- -260550,272400,-48525,106300,16067],
364
- -673175, 163459296),
365
- 11:(11,87091200,[2171465,13486539,-3237113, 25226685,-9595542,
366
- 15493566,15493566,-9595542,25226685,-3237113,
367
- 13486539,2171465], -2224234463, 237758976000),
368
- 12:(1, 5255250, [1364651,9903168,-7587864,35725120,-51491295,
369
- 87516288,-87797136,87516288,-51491295,35725120,
370
- -7587864,9903168,1364651], -3012, 875875),
371
- 13:(13, 402361344000,[8181904909, 56280729661, -31268252574,
372
- 156074417954,-151659573325,206683437987,
373
- -43111992612,-43111992612,206683437987,
374
- -151659573325,156074417954,-31268252574,
375
- 56280729661,8181904909], -2639651053,
376
- 344881152000),
377
- 14:(7, 2501928000, [90241897,710986864,-770720657,3501442784,
378
- -6625093363,12630121616,-16802270373,19534438464,
379
- -16802270373,12630121616,-6625093363,3501442784,
380
- -770720657,710986864,90241897], -3740727473,
381
- 1275983280000)
382
- }
383
-
384
-
385
- def newton_cotes(rn, equal=0):
386
- try:
387
- N = len(rn)-1
388
- if equal:
389
- rn = np.arange(N+1)
390
- elif np.all(np.diff(rn) == 1):
391
- equal = 1
392
- except:
393
- N = rn
394
- rn = np.arange(N+1)
395
- equal = 1
396
-
397
- if equal and N in _builtincoeffs:
398
- na, da, vi, nb, db = _builtincoeffs[N]
399
- return na*np.array(vi,float)/da, float(nb)/db
400
-
401
- if (rn[0] != 0) or (rn[-1] != N):
402
- raise ValueError("The sample positions must start at 0"
403
- " and end at N")
404
- yi = rn / float(N)
405
- ti = 2.0*yi - 1
406
- nvec = np.arange(0,N+1)
407
- C = ti**nvec[:,np.newaxis]
408
- Cinv = np.linalg.inv(C)
409
- # improve precision of result
410
- for i in range(2):
411
- Cinv = 2*Cinv - Cinv.dot(C).dot(Cinv)
412
- vec = 2.0 / (nvec[::2]+1)
413
- ai = np.dot(Cinv[:,::2],vec) * N/2
414
-
415
- if (N % 2 == 0) and equal:
416
- BN = N/(N+3.)
417
- power = N+2
418
- else:
419
- BN = N/(N+2.)
420
- power = N+1
421
-
422
- BN = BN - np.dot(yi**power, ai)
423
- p1 = power+1
424
- fac = power*math.log(N) - gammaln(p1)
425
- fac = math.exp(fac)
426
- return ai, BN*fac
@@ -25,10 +25,12 @@ module Qlang
25
25
 
26
26
  def ch_compile_type(lang)
27
27
  case lang
28
- when '-Ruby'
28
+ when '-rb'
29
29
  Qlang.to_ruby
30
- when '-R'
30
+ when '-r'
31
31
  Qlang.to_r
32
+ when '-py'
33
+ Qlang.to_python
32
34
  else
33
35
  print 'Q support only Ruby and R now.'
34
36
  end
@@ -1,3 +1,3 @@
1
1
  module Qlang
2
- VERSION = "0.0.27182100"
2
+ VERSION = "0.0.27182110"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qlang
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.27182100
4
+ version: 0.0.27182110
5
5
  platform: ruby
6
6
  authors:
7
7
  - gogotanaka